` 1.例程USART_Polling的功能分析 USART_Polling的主程序如下:
- int main(void)
- {
- BOOL state = TRUE;
- /** Init txDataBufUSART2 */
- for(int i = 0; i < DATA_BUF_SIZE; i++)
- {
- txDataBufUSART2[i] = i;
- }
- APM_MINI_LEDInit(LED2);
- APM_MINI_LEDInit(LED3);
- APM_MINI_COMInit(COM1);
- APM_MINI_COMInit(COM2);
- USART_DisableInterrupt(MINI_COM1,USART_INT_RXBNEIE);
- USART_DisableInterrupt(MINI_COM2,USART_INT_RXBNEIE);
- for(int i = 0; i < DATA_BUF_SIZE; i++)
- {
- /** Wait until end of transmission */
- while(USART_ReadStatusFlag(USART2, USART_FLAG_TXBE) == RESET);
- USART_TxData(USART2, txDataBufUSART2[i]);
- /** Wait until end of reception */
- while(USART_ReadStatusFlag(USART1, USART_FLAG_RXBNE) == RESET);
- rxDataBufUSART1[i] = USART_RxData(USART1);
- }
- /** Verify data */
- state = BufferCompare(rxDataBufUSART1, txDataBufUSART2, DATA_BUF_SIZE);
- /** Data is ok then turn off LED2 */
- if(state == TRUE)
- {
- APM_MINI_LEDOn(LED2);
- printf("The DATA IS PASS, LED2 ON
- ");
- }
- while(1)
- {
- APM_MINI_LEDToggle(LED3);
- Delay(0x7ffff);
- }
- }
复制代码
该程序的功能是: 1)对LED2和LED3进行初始化 2)对COM1和COM2进行初始化 3)由USART2发送数组txDataBufUSART2的数据,即0x00~0x1F,共32个字节。 4)USART1对发送的数据进行接收并存入rxDataBufUSART1,由于是采用轮询的方式,故需将USART2_TX(PA2)连接到USART1_RX(PA10)。 5)对数组rxDataBufUSART1和 txDataBufUSART2的内容进行比较,若一致则点亮LED2,并打印“The DATA IS PASS, LED2 ON” 6)使LED3闪烁发光 经程序的编译下载,其运行的效果如图1所示,与程序分析的结果相一致,即左侧的LED2先被点亮,随后LED3开始不停的闪烁。 图1 LED效果 图2 LED原理图 那对串口的输出内容该如何观察呢? 若使用台式机,可用串口线将开发板上的DB9串口座与电脑的串口座连接起来,此外还要把J3的短接子切换到U2一侧,因为调试打印口被定义在 USART2上。 对于笔记本来说,因没有串口的配置,故只能靠USB转串口模块来实现,但USART2_TX(PA2)的输出引脚只有一个,因此需要进行一下扩展处理以达到一拖二的效果。 从串口上达到的效果如图4所示,其中00--1F是发送的32字节的数据,在其后的则是输出打印内容“The DATA IS PASS, LED2 ON”。 图4 串口输出内容 2.串行通讯的应用 借助串口的通讯功能,若与Micro-Lab相配合,则可达到图5所示的效果。 下位机的程序为: uint8_t txDataBufUSART3[20]={0x58,0x5A,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0xF2,0x03,0x00,0x00,0x04,0x00,0x00,0x00,0x58,0x42,0x55};
- int main(void)
- {
- APM_MINI_COMInit(COM2);
- USART_DisableInterrupt(MINI_COM2,USART_INT_RXBNEIE);
- while(1)
- {
- for(int i = 0; i < 20; i++)
- {
- /** Wait until end of transmission */
- while(USART_ReadStatusFlag(USART2, USART_FLAG_TXBE) == RESET);
- USART_TxData(USART2, txDataBufUSART3[i]);
- }
- Delay(0x7ffff);
- }
- }
复制代码
图5 APM32F030控制组件显示
`
|