首页 > 其他 > 详细

novoton-usart使用

时间:2018-05-22 00:20:20      阅读:491      评论:0      收藏:0      [点我收藏+]

 

UART串口

新唐M0/M4 UART都有16级或64级FIFO,用来缓存UART数据的收发。通常配合接收超时中断实现数据的接收任务。

例如:RX FIFO中断触发级别设为14,UART接收到14个字节后才发生RDA中断,降低CPU负荷;再设置接收超时中断,当接收上一个字节后超过定时时间,即发生超时中断,进行数据处理。

 

 1 //初始化串口0
 2 void uart0_init(void)
 3 {
 4     //开启时钟
 5     CLK_EnableModuleClock(UART0_MODULE);
 6     //选择时钟
 7     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UARTSEL_HIRC, CLK_CLKDIV0_UART(1));
 8     //配置外设GPIO
 9     SYS->GPD_MFPL &= ~(SYS_GPD_MFPL_PD0MFP_Msk | SYS_GPD_MFPL_PD1MFP_Msk);
10     SYS->GPD_MFPL |= (SYS_GPD_MFPL_PD0MFP_UART0_RXD | SYS_GPD_MFPL_PD1MFP_UART0_TXD);
11     //复位外设
12     SYS_ResetModule(UART0_RST);
13     //配置并打开外设
14     UART_Open(UART0, 115200);
15     //设置接收超时
16     UART_SetTimeoutCnt(UART0, 20);
17     //设置串口FIFO接收中断触发为4个字节
18     UART0->FIFO &= ~UART_FIFO_RFITL_4BYTES;
19     UART0->FIFO |= UART_FIFO_RFITL_8BYTES;
20     //使能中断
21     UART_ENABLE_INT(UART0, UART_INTEN_RDAIEN_Msk | UART_INTEN_TOCNTEN_Msk | UART_INTEN_RXTOIEN_Msk);
22     NVIC_EnableIRQ(UART0_IRQn);
23 }
 1 //串口数据构造
 2 UART_BUF_t UART_dat;
 3 
 4 //串口中断服务函数
 5 void UART0_IRQHandler(void)
 6 {
 7     if (UART_GET_INT_FLAG(UART0,UART_INTSTS_RDAINT_Msk))
 8     {
 9         while(!UART_GET_RX_EMPTY(UART0))
10             UART_dat.buf[UART_dat.len++] = UART_READ(UART0);
11     }
12     if (UART_GET_INT_FLAG(UART0,UART_INTSTS_RXTOIF_Msk))
13     {
14         while(!UART_GET_RX_EMPTY(UART0))
15             UART_dat.buf[UART_dat.len++] = UART_READ(UART0);
16         UART_dat.end = 1;
17     }
18 }
1 if(UART_dat.end)
2 {
3     printf("UART DAT:%s\n",UART_dat.buf);
4     UART_dat.end = 0;
5     UART_dat.len = 0;
6 }

 

注意到,配置完UART0后可以直接使用printf函数进行输出,因为system_M451Series.h定义了默认输出口为UART0

1 /*---------------------------------------------------------------------------------------------------------*/
2 /* Macro Definition                                                                                        */
3 /*---------------------------------------------------------------------------------------------------------*/
4 #ifndef DEBUG_PORT
5 # define DEBUG_PORT      UART0       /*!< Select Debug Port which is used for retarget.c to output debug message to UART */
6 #endif

 

novoton-usart使用

原文:https://www.cnblogs.com/llw2017/p/9070031.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!