打印

M0 UART的收发。

[复制链接]
2836|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kyzb001|  楼主 | 2010-11-4 17:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码完全按照note上的
/* Step 1. GPIO initial */
SYS->GPBMFP.UART0_RX  =1;
SYS->GPBMFP.UART0_TX  =1;
   
/* Step 2. Enable and Select UART clock source*/  
UNLOCKREG();
SYSCLK->PWRCON.XTL12M_EN = 1;
LOCKREG();
  
SYSCLK->APBCLK.UART0_EN = 1;//Enable UART clock
SYSCLK->CLKSEL1.UART_S = 0; //Select 12Mhz for UART clock source                     
SYSCLK->CLKDIV.UART_N = 0; //UART clock source = 12Mhz;
/* Step 3. Select Operation mode */
UART0->FCR.TFR =1;   //Reset Tx FIFO
UART0->FCR.RFR =1;   //Reset Rx FIFO
UART0->FCR.RFITL = 0;//Set Rx Trigger Level -1byte FIFO  
UART0->LCR.PBE = 0;//Disable parity
UART0->LCR.WLS = 3;//8 data bits
UART0->LCR.NSB = 0;//Enable 1 Stop bit
  
/* Step 4. Set BaudRate */
UART0->BAUD.DIVX_EN = 1;
UART0->BAUD.DIVX1   = 1;
UART0->BAUD.DIV = 12000000 / 115200  -2;

do
{
  printf("\nUART Sample Demo. (Press 'ESC' to exit)\n");
}while(GetChar()!=0x1B);
printf("Exit\n");
烧写进去后,用串口调试助手无反应
串口调试助手的设置是:
串口:com1
波特率:115200
数据位:8
停止位:1
效验位:无

而后我又把do~while里的代码改成
while(1)
{
    while(UART0->FSR.TX_FULL == 1);
  UART0->DATA = ch;
     if(ch == '\n')
     {
         while(UART0->FSR.TX_FULL == 1);
         UART0->DATA = '\r';
  }
}

其他的设置一样。结果也是无。
请问下,这个是什么原因。

相关帖子

沙发
kyzb001|  楼主 | 2010-11-4 21:34 | 只看该作者
兄弟们啊!  给个解决的方法啊! 下午用示波器测。TX有数据发出,一高兴就去吃晚饭,回来又残疾了。一直输出低电平。

使用特权

评论回复
板凳
hotpower| | 2010-11-5 00:00 | 只看该作者
很多例程都有uart。最好先别自己编写。

使用特权

评论回复
地板
kyzb001|  楼主 | 2010-11-5 08:09 | 只看该作者
不是有个pdf文件说uart的嘛, 我是直接把里面的代码烧的,不是我自己写的。

使用特权

评论回复
5
hotpower| | 2010-11-5 10:29 | 只看该作者
不要用串口住手,用串口通试试。

使用特权

评论回复
6
kyzb001|  楼主 | 2010-11-5 11:09 | 只看该作者
主要是SP232的电平一直是低。
昨天晚上在测的时候突然来了一次数据,然后我就睡觉去了,今天早上发现又没用了。
SP232的引脚一直输出的是低电平
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/
#include <stdio.h>                                                                                                                                                                                                                         
#include "NUC1xx.h"

/*----------------------------------------------------------------------------
  Interrupt subroutine
  ----------------------------------------------------------------------------*/
void ADC_IRQHandler(void) // Timer0 interrupt subroutine
{
        ADC->ADSR.ADF=1;
          
}
/*----------------------------------------------------------------------------
  MAIN function
  ----------------------------------------------------------------------------*/
int32_t main (void)
{
                           
        /* Step 1. GPIO initial */
        SYS->GPBMFP.UART0_RX         =1;
        SYS->GPBMFP.UART0_TX         =1;
                               
        /* Step 2. Enable and Select UART clock source*/               
        UNLOCKREG();
        SYSCLK->PWRCON.XTL12M_EN = 1;
        LOCKREG();
               
        SYSCLK->APBCLK.UART0_EN = 1;//Enable UART clock
        SYSCLK->CLKSEL1.UART_S = 0;        //Select 12Mhz for UART clock source                                                                                                   
        SYSCLK->CLKDIV.UART_N = 0;        //UART clock source = 12Mhz;

        /* Step 3. Select Operation mode */
        UART0->FCR.TFR =1;                        //Reset Tx FIFO
        UART0->FCR.RFR =1;                        //Reset Rx FIFO

        UART0->FCR.RFITL = 0;//Set Rx Trigger Level -1byte FIFO  
        UART0->LCR.PBE        = 0;//Disable parity
        UART0->LCR.WLS        = 3;//8 data bits
        UART0->LCR.NSB        = 0;//Enable 1 Stop bit
               
        /* Step 4. Set BaudRate */
        UART0->BAUD.DIVX_EN = 1;
        UART0->BAUD.DIVX1   = 1;
        UART0->BAUD.DIV = 12000000 / 115200  -2;
       
        while(1)
        {       
                printf("\nUART Sample Demo. (Press 'ESC' to exit)\n");
        }
}





这个是代码。 一直持续发送的。

使用特权

评论回复
7
kyzb001|  楼主 | 2010-11-5 11:10 | 只看该作者
SYSCLK->PWRCON.XTL12M_EN = 1;  这个我也换过22的  同样的情况。

使用特权

评论回复
8
hotpower| | 2010-11-5 11:17 | 只看该作者
自己做都板?应该是硬件都问题。232芯片焊接问题

使用特权

评论回复
9
lqx861106| | 2010-11-5 11:24 | 只看该作者
芯唐的CPU就是开发难度大。

使用特权

评论回复
10
hotpower| | 2010-11-5 12:51 | 只看该作者
同感…模块功能看着很强大,但带来了更大的繁琐。

使用特权

评论回复
11
tg.liu| | 2010-11-5 13:45 | 只看该作者
先用官方的例程测试硬件, 然后再逐步用自己的代码替代, 查找问题所在.

使用特权

评论回复
12
kyzb001|  楼主 | 2010-11-5 14:05 | 只看该作者
一直都在用官方给的代码测试的。郁闷。

使用特权

评论回复
13
kyzb001|  楼主 | 2010-11-5 14:59 | 只看该作者
今天NUC1xx_AP_NOTE 这个文件夹中的uart测试成功,但是我吧文件全部移植带另一个新建的项目就不行?  为什么呢。

使用特权

评论回复
14
tg.liu| | 2010-11-5 15:30 | 只看该作者
看看包含的头文件对不, 不要搞错了.

使用特权

评论回复
15
kyzb001|  楼主 | 2010-11-5 17:51 | 只看该作者
经网友发了个新的bsp给我  测试成功。原来cmsis 纠结。非常感谢大家。

使用特权

评论回复
16
tg.liu| | 2010-11-5 18:22 | 只看该作者
呵呵, 我通常是把BSP复杂到工程文件夹里, 这样不会因为BSP修改造成程序代码的问题.

多个项目共用一个BSP感觉容易出问题.

使用特权

评论回复
17
hotpower| | 2010-11-5 23:50 | 只看该作者
这是个隐含的致命问题。

使用特权

评论回复
18
kyzb001|  楼主 | 2010-11-6 15:19 | 只看该作者
开始那个文件很乱,很杂。 现在条例清楚,好多了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

623

帖子

1

粉丝