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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1167|回復: 2
收起左側

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

[復制鏈接]
ID:1101834 發(fā)表于 2024-9-17 11:19 | 顯示全部樓層 |閱讀模式
使用stm32f103c8t6單片機與as608模塊在網上使用開源的標準庫代碼,可以正常握手,但是使用重新編寫的hal庫代碼,一直無法正常通信,f4和f1的板子都嘗試過,總是找不到問題
,網上開源的as608通信協(xié)議代碼都試過了,基本相同但是都無法完成握手,上網查詢資料,有論壇說波特率從57600改為9600可以解決問題,我 修改后仍無法完成握手,其中delay函數(shù)移植的正點原子。實測定時準確,并未在工程加入過多無關代碼,只是為as608做測試 。有沒有大哥能幫我答疑解惑的,謝謝
下面是串口二的接收代碼,經過測試也沒有問題,可以正常收發(fā)不知道是不是編譯器優(yōu)化的原因,目前是-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;     /* 接收數(shù)據(jù)錯誤,重新開始接收 */
  30.                     }
  31.                 }
  32.             }
  33.         }
  34.     }
復制代碼
  1. //串口發(fā)送一個字節(jié)
  2. static void MYUSART_SendData(u8 data)
  3. {
  4.          
  5.         USART2->DR = data;
  6.         while((USART2->SR&0X40)==0);
  7. }
  8. //發(fā)送包頭
  9. static void SendHead(void)
  10. {
  11.         MYUSART_SendData(0xEF);
  12.         MYUSART_SendData(0x01);
  13. }
  14. //發(fā)送地址
  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. //發(fā)送包標識,
  23. static void SendFlag(u8 flag)
  24. {
  25.         MYUSART_SendData(flag);
  26. }
  27. //發(fā)送包長度
  28. static void SendLength(int length)
  29. {
  30.         MYUSART_SendData(length>>8);
  31.         MYUSART_SendData(length);
  32. }
  33. //發(fā)送指令碼
  34. static void Sendcmd(u8 cmd)
  35. {
  36.         MYUSART_SendData(cmd);
  37. }
  38. //發(fā)送校驗和
  39. static void SendCheck(u16 check)
  40. {
  41.         MYUSART_SendData(check>>8);
  42.         MYUSART_SendData(check);
復制代碼
  1. //與AS608握手 PS_HandShake
  2. //參數(shù): 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)//接收到數(shù)據(jù)
  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;//模塊內有效指紋個數(shù)
  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);//讀庫指紋個數(shù)

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

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

通信狀態(tài)

通信狀態(tài)
回復

使用道具 舉報

ID:973695 發(fā)表于 2024-9-19 11:05 | 顯示全部樓層
一般來說串口通信的問題可以先用 串口助手調試as608模塊,再用串口助手接收 stm32f103c8t6單片機所發(fā)送的數(shù)據(jù),如果還有問題再考慮是不是波特率誤差
回復

使用道具 舉報

ID:1101834 發(fā)表于 2024-10-12 12:05 | 顯示全部樓層
stycx 發(fā)表于 2024-9-19 11:05
一般來說串口通信的問題可以先用 串口助手調試as608模塊,再用串口助手接收 stm32f103c8t6單片機所發(fā)送的數(shù) ...

好的謝謝。明白
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品成人av久久 | 亚洲电影一级片 | 高清国产午夜精品久久久久久 | 亚洲一区二区三区四区五区中文 | www.v888av.com| 超碰免费在线 | 永久免费视频 | 亚洲精品高清视频 | 久久久久国产一区二区三区四区 | 在线看av的网址 | 亚洲在线一区 | 亚洲欧美激情国产综合久久久 | 在线观看毛片网站 | 五月婷婷婷 | 久久久久久九九九九九九 | www.yw193.com | 成人免费精品 | 精品综合视频 | 精品久久久久久亚洲精品 | 51ⅴ精品国产91久久久久久 | 免费午夜剧场 | 午夜天堂精品久久久久 | 国产精品精品久久久 | 久久香蕉网 | 国产91综合一区在线观看 | 国产黄色大片在线免费观看 | 亚洲美女天堂网 | 久久午夜视频 | 久久男女视频 | 亚洲狠狠爱 | 精品一区二区三区在线观看国产 | 色婷婷综合网站 | a免费视频| 九九久久精品 | 日本欧美国产 | 国产成人一区二区三区精 | 天天看天天爽 | 色就干 | 久久亚洲一区二区 | 国产成人综合在线 | 亚洲欧美视频一区 |