久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1105|回復: 2
打印 上一主題 下一主題
收起左側

stm32與as608握手失敗,換了幾個單片機都不行

[復制鏈接]
跳轉到指定樓層
樓主
使用stm32f103c8t6單片機與as608模塊在網上使用開源的標準庫代碼,可以正常握手,但是使用重新編寫的hal庫代碼,一直無法正常通信,f4和f1的板子都嘗試過,總是找不到問題
,網上開源的as608通信協議代碼都試過了,基本相同但是都無法完成握手,上網查詢資料,有論壇說波特率從57600改為9600可以解決問題,我 修改后仍無法完成握手,其中delay函數移植的正點原子。實測定時準確,并未在工程加入過多無關代碼,只是為as608做測試 。有沒有大哥能幫我答疑解惑的,謝謝
下面是串口二的接收代碼,經過測試也沒有問題,可以正常收發不知道是不是編譯器優化的原因,目前是-03
  1. if(huart->Instance == USART2)             /* 如果是串口1 */
  2.     {
  3.                 HAL_UART_Receive_IT(&huart2, (uint8_t *)g_rx_buffer_usart2, RXBUFFERSIZE);
  4.         if((g_usart2_rx_sta & 0x8000) == 0)      /* 接收未完成 */
  5.         {
  6.             if(g_usart2_rx_sta & 0x4000)         /* 接收到了0x0d */
  7.             {
  8.                 if(g_rx_buffer_usart2[0] != 0x0a)
  9.                 {
  10.                     g_usart2_rx_sta = 0;         /* 接收錯誤,重新開始 */
  11.                 }
  12.                 else
  13.                 {
  14.                     g_usart2_rx_sta |= 0x8000;   /* 接收完成了 */
  15.                 }
  16.             }
  17.             else                                /* 還沒收到0X0D */
  18.             {
  19.                 if(g_rx_buffer_usart2[0] == 0x0d)
  20.                 {
  21.                     g_usart2_rx_sta |= 0x4000;
  22.                 }
  23.                 else
  24.                 {
  25.                     g_usart2_rx_buf[g_usart2_rx_sta & 0X3FFF] = g_rx_buffer_usart2[0] ;
  26.                     g_usart2_rx_sta++;
  27.                     if(g_usart2_rx_sta > (USART_REC_LEN - 1))
  28.                     {
  29.                         g_usart2_rx_sta = 0;     /* 接收數據錯誤,重新開始接收 */
  30.                     }
  31.                 }
  32.             }
  33.         }
  34.     }
復制代碼
  1. //串口發送一個字節
  2. static void MYUSART_SendData(u8 data)
  3. {
  4.          
  5.         USART2->DR = data;
  6.         while((USART2->SR&0X40)==0);
  7. }
  8. //發送包頭
  9. static void SendHead(void)
  10. {
  11.         MYUSART_SendData(0xEF);
  12.         MYUSART_SendData(0x01);
  13. }
  14. //發送地址
  15. static void SendAddr(void)
  16. {
  17.         MYUSART_SendData(AS608Addr>>24);
  18.         MYUSART_SendData(AS608Addr>>16);
  19.         MYUSART_SendData(AS608Addr>>8);
  20.         MYUSART_SendData(AS608Addr);
  21. }
  22. //發送包標識,
  23. static void SendFlag(u8 flag)
  24. {
  25.         MYUSART_SendData(flag);
  26. }
  27. //發送包長度
  28. static void SendLength(int length)
  29. {
  30.         MYUSART_SendData(length>>8);
  31.         MYUSART_SendData(length);
  32. }
  33. //發送指令碼
  34. static void Sendcmd(u8 cmd)
  35. {
  36.         MYUSART_SendData(cmd);
  37. }
  38. //發送校驗和
  39. static void SendCheck(u16 check)
  40. {
  41.         MYUSART_SendData(check>>8);
  42.         MYUSART_SendData(check);
復制代碼
  1. //與AS608握手 PS_HandShake
  2. //參數: PS_Addr地址指針
  3. //說明: 模塊返新地址(正確地址)        
  4. u8 PS_HandShake(u32 *PS_Addr)
  5. {        
  6.         SendHead();
  7.         SendAddr();
  8.         MYUSART_SendData(0X01);
  9.         MYUSART_SendData(0X00);
  10.         MYUSART_SendData(0X00);
  11.         delay_ms(200);
  12.         printf("sta = %d",g_usart2_rx_sta);
  13.         if(g_usart2_rx_sta&0X8000)//接收到數據
  14.         {               
  15.                 if(//判斷是不是模塊返回的應答包                                
  16.                                         g_usart2_rx_buf[0]==0XEF
  17.                                 &&g_usart2_rx_buf[1]==0X01
  18.                                 &&g_usart2_rx_buf[6]==0X07
  19.                         )
  20.                         {
  21.                                 *PS_Addr=(g_usart2_rx_buf[2]<<24) + (g_usart2_rx_buf[3]<<16)
  22.                                                                 +(g_usart2_rx_buf[4]<<8) + (g_usart2_rx_buf[5]);
  23.                                 g_usart2_rx_sta=0;
  24.                                 return 0;
  25.                         }
  26.                 g_usart2_rx_sta=0;                                       
  27.         }
  28.         return 1;               
  29. }
  30. //初始化,與AS608握手
  31. SysPara AS608Para;
  32. u8 ensure1;
  33. u16 ValidN;//模塊內有效指紋個數
  34. void AS608_Init(void)
  35. {
  36.    //printf("\r\n與AS608模塊握手....\r\n");
  37.         while(PS_HandShake(&AS608Addr))//與AS608模塊握手
  38.         {
  39.                 delay_ms(400);
  40.                 //printf("\r\n未檢測到模塊!!!\r\n");
  41.                 delay_ms(800);
  42.                 //printf("\r\n嘗試連接模塊...\r\n");
  43.         }
  44.         printf("\r\n通訊成功!!!\r\n");

  45.         ensure1=PS_ValidTempleteNum(&ValidN);//讀庫指紋個數

  46.         ensure1=PS_ReadSysPara(&AS608Para);  //讀參數

  47. }
復制代碼
圖片中的sta就是接收狀態嗎,一直接收不到正常代碼,先是0,再是以12遞增的數據

屏幕截圖 2024-09-17 111739.png (32.15 KB, 下載次數: 4)

通信狀態

通信狀態
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:973695 發表于 2024-9-19 11:05 | 只看該作者
一般來說串口通信的問題可以先用 串口助手調試as608模塊,再用串口助手接收 stm32f103c8t6單片機所發送的數據,如果還有問題再考慮是不是波特率誤差
回復

使用道具 舉報

板凳
ID:1101834 發表于 2024-10-12 12:05 | 只看該作者
stycx 發表于 2024-9-19 11:05
一般來說串口通信的問題可以先用 串口助手調試as608模塊,再用串口助手接收 stm32f103c8t6單片機所發送的數 ...

好的謝謝。明白
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美三区 | 成人区精品 | 国产精品一区二区在线播放 | 精品久久久久久久久久久久久久 | 在线一级片 | 嫩草影院网址 | 午夜精品久久久 | 男女网站免费观看 | 午夜精品在线 | 亚洲国产一区在线 | av资源网站| xnxx 日本免费 | 久久日韩精品一区二区三区 | 不卡在线视频 | 久久久久久亚洲精品 | jlzzjlzz国产精品久久 | 久色网| 羞羞视频在线观看免费观看 | 日本在线免费视频 | 亚洲91视频| 亚洲欧洲一区 | 国产情侣久久 | 欧美日韩不卡合集视频 | 国产成人一区 | 国产精品日韩欧美一区二区三区 | 成人精品网 | 国产精品日韩一区 | 91久久精品国产91久久 | 日韩黄| 国产美女在线免费观看 | 欧美黄色录像 | 在线观看视频h | 北条麻妃国产九九九精品小说 | 精精久久 | av中文在线观看 | 欧美精品免费观看二区 | 亚洲精品性视频 | 免费黄色片在线观看 | 国产成视频在线观看 | 国产女人第一次做爰毛片 | 97av|