[活动专区] 【AC7811开发板试用活动】USART1测试

[复制链接]
823|2
 楼主| xinmeng_wit 发表于 2019-11-7 21:06 | 显示全部楼层 |阅读模式
对于USART,我们可以直接根据示例代码修改而来。这里选择usart1.

1.确定USART1的引脚。

捕获.PNG

可以从GPIO引脚分配图中选择USART1的pin脚,这里选择PB5和PB6作为USART1的TX和RX。

下面对usart1进行初始化

  1. void uart_init(void)
  2. {
  3.        
  4.         UART_SettingType uartSetting;
  5.        
  6.         GPIO_SetFunc(GPIO_PB5, 1);//设置PB5为uart功能
  7.         GPIO_SetFunc(GPIO_PB6, 1);//设置PB6为uart功能
  8.        
  9.         uartSetting.baudrate = 115200;//设置波特率
  10.         uartSetting.dataBits = 8;
  11.         uartSetting.stopBits = 1;
  12.         uartSetting.parity         = 0;
  13.         uartSetting.fifoByte = ENABLE;//使能缓冲区
  14.         uartSetting.dmaEn          = DISABLE;//dma不使能
  15.         UART_Init(UART1, &uartSetting);//初始化串口
  16.        
  17.         UART_SetEventCallback(UART1, UART_IRQHandler);//设置中断回调函数
  18.         UART_SetRxIntEn(UART1, ENABLE);//使能接收中断
  19.        
  20.         NVIC_ClearPendingIRQ(UART1_IRQn);
  21.         NVIC_EnableIRQ(UART1_IRQn);       
  22. }
如上设置使能了串口接收中断,回调函数如下:

  1. int32_t UART_IRQHandler(uint8_t port, uint32_t LSR0, uint32_t LSR1)
  2. {
  3.         if ((UART1->UARTn_IER.ERXNE == 1) && (LSR0 & LSR0_DR))
  4.     {
  5.                 rx_table[step++]=UART_ReceiveData(UART1);
  6.     }

  7.     if ((UART1->UARTn_IER.ETXE == 1) && (LSR0 & LSR0_THRE))//发送数据
  8.     {
  9.       
  10.     }

  11.     return 0;
  12. }

串口发送函数:

  1. void UART_SendString(uint8_t *pDataBuf, uint8_t dataLen)
  2. {
  3.         for (uint8_t ii = 0; ii < dataLen; ii++)
  4.         {
  5.                 UART_SendData(UART1, pDataBuf[ii]);//发送一个byte
  6.                 while(!UART1->UARTn_LSR0.TC);//等待发送完成
  7.         }
  8. }

主函数:

  1. int main(void)
  2. {
  3.         //SetSysClock();
  4.         InitDelay();
  5.         led_init();
  6.         uart_init();
  7.         exti_init();
  8.         //pwm_gpio_init();
  9.         //PWM1_GenerateFrequency();
  10.         GPIO_SetPinValue(GPIO_PA0, 1);               
  11.         while(1)
  12.         {
  13.                 mdelay(1000);
  14.                 UART_SendString((uint8_t*)"uart1 test...",sizeof("uart1 test...")-1);
  15.                 GPIO_SetPinValue(GPIO_PA0, 0);
  16.         }
  17. }
效果如下::
捕获2.PNG



condition 发表于 2019-11-11 19:59 | 显示全部楼层
一般新板子到手之后,都是先点灯,再通讯
consumption 发表于 2019-11-17 17:53 | 显示全部楼层
感谢楼主的测评贴
您需要登录后才可以回帖 登录 | 注册

本版积分规则

70

主题

279

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部