3 回答

倚天杖
TA貢獻1828條經驗 獲得超3個贊
單片機有串口中斷。串口每收到1byte數據就會觸發1次接收中斷。中斷一般像下面這面,你可以根據自己的需求改。我的做法是中段里只管接收數據,然后定時器中監測一定時間內沒有收到數據,認為數據接收完畢,然后置位接受完成標志。在主函數中查詢這個標志,進行數據處理。
123456789101112131415161718192021222324 | void USART1_IRQHandler ( void ) //串口中斷 { u8 dat,flag = 0; if (USART_GetFlagStatus(USART1, USART_FLAG_ORE) != RESET) { USART_ClearITPendingBit(USART1,USART_IT_ORE); dat = USART_ReceiveData(USART1); flag = 1; } if (USART_GetITStatus(USART1,USART_IT_RXNE)!= RESET) //Receive Data register not empty interrupt. { USART_ClearITPendingBit(USART1,USART_IT_RXNE); dat = USART_ReceiveData(USART1); flag = 1; } if (flag == 1) { Uart1RecvOver.recvOver = 0; if (PushInQueue_Q(&uart1RecvQueue, dat)) Uart1RecvOver.recvTimeCnt = 0; else Uart1RecvOver.recvTimeCnt = USART_RECV_END_TIME; } } |

jeck貓
TA貢獻1909條經驗 獲得超7個贊
單片機接收處理串口的數據的過程就是配置好波特率、位寬、校驗位等,收到數據 后可以引起中斷,也可以查詢標志位,然后進行相應的處理。
1) 串口時鐘使能,GPIO 時鐘使能。
2) 設置引腳復用器映射:調用 GPIO_PinAFConfig 函數。
3) GPIO 初始化設置:要設置模式為復用功能。
4) 串口參數初始化:設置波特率,字長,奇偶校驗等參數。
5) 開啟中斷并且初始化 NVIC,使能中斷(如果需要開啟中斷才需要這個步驟)。
6) 使能串口。
7) 編寫中斷處理函數:函數名格式為 USARTxIRQHandler(x 對應串口號)

慕尼黑8549860
TA貢獻1818條經驗 獲得超11個贊
串口通信是有協議的,所有操作都得按照協議來,和你用什么編譯器/編輯器或者框架無關,如何讀取數據要看你的單片機硬件了:
有串口->直接讀取寄存器的數據就行了,每次一個BYTE,一般該寄存器都命名為SBUF
無串口->需使用軟件模擬串口通信。
添加回答
舉報
0/150
提交
取消