串口发送部分代码:
02 | void usart1SendData(CPU_INT08U ch) |
05 | CPU_INT08U isTheFirstCh; |
07 | OSSemPend(&Usart1Sem, 0, OS_OPT_PEND_BLOCKING, NULL, &err); |
08 | OSSemPend(&Usart1TxBufSem, 0, OS_OPT_PEND_BLOCKING, NULL, &err); |
10 | if (pTxBufRead == pTxBufWrite){ |
14 | if ((pTxBufWrite++) == &Usart1TxBuf[USART1_TX_BUFFER_LEN - 1]){ |
15 | pTxBufWrite = Usart1TxBuf; |
18 | USART_ITConfig(USART1, USART_IT_TXE, ENABLE); |
20 | OSSemPost(&Usart1Sem, OS_OPT_POST_1, &err); |
串口接收部分代码:
02 | void USART1_IRQHandler( void ) |
07 | if (USART_GetITStatus(USART1, USART_IT_TXE) != RESET) { |
08 | USART_SendData(USART1, *pTxBufRead); |
09 | if ((pTxBufRead++) == &Usart1TxBuf[USART1_TX_BUFFER_LEN - 1]){ |
10 | pTxBufRead = Usart1TxBuf; |
12 | if (pTxBufRead == pTxBufWrite){ |
13 | USART_ITConfig(USART1, USART_IT_TXE, DISABLE); |
15 | OSSemPost(&Usart1TxBufSem, OS_OPT_POST_1, &err); |
18 | if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){ |
19 | *pRxBufWrite = USART_ReceiveData(USART1); |
20 | OSTaskQPost(&Usart1RxTaskTCB, pRxBufWrite, 1, OS_OPT_POST_FIFO, &err); |
21 | if ((pRxBufWrite++) == &Usart1RxBuf[USART1_RX_BUFFER_LEN - 1]){ |
22 | pRxBufWrite = Usart1RxBuf; |
例程为ucos-iii的,用mdk4.7创建,测试板为旗舰板,串口发送HEX:5A A5 06 83 60 00 01 00 01可以让LED0亮2S作为测试。有错漏麻烦大家跟帖指正,谢谢。