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