|
發布時間: 2021-5-6 15:53
正文摘要:stm32f103單片機做通信控制,發送的數據總是不對。抄了網上各種發送程序,禁止編譯器優化等都試遍了。實在不知道錯在哪里,請網友幫忙指教。比如說我要發送的數據:0x5a 0xa5 0x03   ... |
xu2509674896 發表于 2021-5-6 19:29 謝謝!我現在只是想把功能實現,上面是在開關步進電機。現在外地出差還沒試你說可以正常用的程序,我看了一下大概率是不正常的,因為那段程序我已經試過了。 |
| 51的過來學習一下,確定兩邊的波特率是一樣的? |
|
恕我太菜看不出什么問題來,但是從你程序的大括號上看,我發現你的程序一直在初始化硬件,然后再發送,我建議你把硬件的初始化配置只執行一次,發送部分放在一個while(1)循環里,最好加一個按鍵條件判斷發送,方便調試。最后,我把一個確定沒有問題的函數給你,你應該也是標準庫寫的,你看看試一試。 /***************** 發送一個字節 **********************/ void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)//選擇哪一個串口,選擇發送哪一個數據 { /* 發送一個字節數據到USART */ USART_SendData(pUSARTx,ch); /* 等待發送數據寄存器為空 */ while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET); } /****************** 發送指定長度的數組 ************************/ void Usart_SendArray( USART_TypeDef * pUSARTx, uint8_t *array, uint16_t num)//選擇哪一個串口,數組名或者指針,數據長度即有幾個發送的數據 { uint8_t i; for(i=0; i<num; i++) { /* 發送一個字節數據到USART */ Usart_SendByte(pUSARTx,array[i]); } /* 等待發送完成 */ while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET); } modbus通信的部分, |
| 求一份可以一次正確發送多字節的程序范例,稍微改一下還能發送MODBUS協議的多字節程序。 |