zoukankan      html  css  js  c++  java
  • novoton-usart使用

    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
    ",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
  • 相关阅读:
    Flux 是什么?
    看深度学习框架排名第一的TensorFlow如何进行时序预测!
    时间序列ARIMA模型预测方法,及相关函数使用方法介绍
    解决MATLAB在K-means提示“KMEANS does not accept complex data.”错误
    机器学习——朴素贝叶斯分类器
    K-近邻分类法及tabulate、rng、categorical、varfun、discretize函数用法介绍
    灰色预测模型及MATLAB实例
    数学建模——预测模型简介
    支持向量机(SVM)MATLAB 实例讲解,及选择训练方式使误差率尽可能减为0
    批量修改文件后缀名,文件批量排序
  • 原文地址:https://www.cnblogs.com/llw2017/p/9070031.html
Copyright © 2011-2022 走看看