[技术问答] NUC131只要写UART0->DATA,其TE_FLAG就一直保持0,数据也发出去

[复制链接]
1738|8
 楼主| tomcatimage 发表于 2017-12-15 13:52 | 显示全部楼层 |阅读模式
刚到手的NuTiny-EVB-NUC131的板子,用Keil烧写了官方库工程UART_TxRx_Function编译的程序,没有收到数据。调试发现只要写数据TE_FLAG就保持0,表示TX_FIFO不为空,数据也没有发出去。检查了UART0的管脚以及时钟都已经设置好了。
问题会在哪里,请大神指教。不然要看好久芯片手册了。
xixi2017 发表于 2017-12-15 14:22 | 显示全部楼层
你换个例子试试,其他例子里面也有串口0的printf
21mengnan 发表于 2017-12-15 15:01 | 显示全部楼层
初始化方法
  1. void SYS_Init(void)
  2. {
  3.     /*---------------------------------------------------------------------------------------------------------*/
  4.     /* Init System Clock                                                                                       */
  5.     /*---------------------------------------------------------------------------------------------------------*/

  6.     /* Enable Internal RC 22.1184MHz clock */
  7.     CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);

  8.     /* Waiting for Internal RC clock ready */
  9.     CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk);

  10.     /* Switch HCLK clock source to Internal RC and HCLK source divide 1 */
  11.     CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC, CLK_CLKDIV_HCLK(1));

  12.     /* Enable external XTAL 12MHz clock */
  13.     CLK_EnableXtalRC(CLK_PWRCON_XTL12M_EN_Msk);

  14.     /* Waiting for external XTAL clock ready */
  15.     CLK_WaitClockReady(CLK_CLKSTATUS_XTL12M_STB_Msk);

  16.     /* Set core clock as PLL_CLOCK from PLL */
  17.     CLK_SetCoreClock(PLL_CLOCK);

  18.     /* Enable UART module clock */
  19.     CLK_EnableModuleClock(UART0_MODULE);

  20.     /* Select UART module clock source */
  21.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));

  22.     /*---------------------------------------------------------------------------------------------------------*/
  23.     /* Init I/O Multi-function                                                                                 */
  24.     /*---------------------------------------------------------------------------------------------------------*/

  25.     /* Set GPB multi-function pins for UART0 RXD(PB.0) and TXD(PB.1) */
  26.     SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB0_Msk | SYS_GPB_MFP_PB1_Msk);
  27.     SYS->GPB_MFP |= (SYS_GPB_MFP_PB0_UART0_RXD | SYS_GPB_MFP_PB1_UART0_TXD);

  28. }

  29. void UART0_Init(void)
  30. {
  31.     /*---------------------------------------------------------------------------------------------------------*/
  32.     /* Init UART                                                                                               */
  33.     /*---------------------------------------------------------------------------------------------------------*/
  34.     /* Reset UART0 module */
  35.     SYS_ResetModule(UART0_RST);

  36.     /* Configure UART0 and set UART0 Baudrate */
  37.     UART_Open(UART0, 115200);
  38. }
 楼主| tomcatimage 发表于 2017-12-15 15:08 | 显示全部楼层
编译执行过4个工程了,都一样。如果没有定义NONBLOCK_PRINTF,就死在printf()调用的SendChar_ToUART()函数里,一直检查TXFIFO未满,因为没有发出去,所以一直都是满的。
NUC131是M0518的库吧。
 楼主| tomcatimage 发表于 2017-12-15 15:09 | 显示全部楼层
定义了NONBLOCK_PRINTF,不会死在printf()里,但是串口没有输出。我自己建了个工程,查看UART状态,就是TE_FLAG一直为0;
 楼主| tomcatimage 发表于 2017-12-15 15:12 | 显示全部楼层

初始化部分我没动过,刚才对比了一下,跟你贴的是一样的。
 楼主| tomcatimage 发表于 2017-12-15 15:19 | 显示全部楼层
我用的是NuTiny-EVB-NUC131-LQFP64这款,如果有串口可用的工程,发我一个试试。
 楼主| tomcatimage 发表于 2017-12-15 15:49 | 显示全部楼层
CLK_SetHCLK()函数里:
CLK->CLKSEL0 = (CLK->CLKSEL0 & (~CLK_CLKSEL0_HCLK_S_Msk)) | u32ClkSrc;
这条指令不能改变CLKSEL0寄存器的值,我写了句CLK->CLKSEL0 = 0x3A,调试时内存地址0x50000210出的值依旧是初始值0x3F!
xinpian101 发表于 2017-12-15 19:29 | 显示全部楼层
这个我也不懂啊,都是用printf函数做。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

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