新唐M051 UART0使用程序

2014-12-11来源: 51hei关键字:新唐M051  UART0
#include "UART.h"
/****************************************
*函数名称:UartInit
*输    入:unFosc   晶振频率
          unBaud  波特率
*输    出:无
*功    能:串口初始化
******************************************/
VOID UartInit(UINT32 unFosc,UINT32 unBaud)
{
    P3_MFP &= ~(P31_TXD0 | P30_RXD0);  
    P3_MFP |= (TXD0 | RXD0);      //P3.0 使能为串口0接收
          //P3.1 使能为串口0发送
    UART0_Clock_EN;         //串口0时钟使能
    UARTClkSource_ex12MHZ;  //串口时钟选择为外部晶振
    CLKDIV &= ~(15<<8);  //串口时钟分频为0
    IPRSTC2 |= UART0_RST;   //复位串口0
    IPRSTC2 &= ~UART0_RST;  //复位结束
    UA0_FCR |= TX_RST;      //发送FIFO复位
    UA0_FCR |= RX_RST;      //接收FIFO复位
    UA0_LCR &= ~PBE;      //校验位功能取消
 UA0_LCR &= ~WLS;
    UA0_LCR |= WL_8BIT;     //8位数据位
    UA0_LCR &= NSB_ONE;     //1位停止位 
    UA0_BAUD |= DIV_X_EN|DIV_X_ONE;   //设置波特率分频    
    UA0_BAUD |= ((unFosc / unBaud) -2); //波特率设置  UART_CLK/(A+2) = 115200, UART_CLK=12MHz
 UA0_IER |= RDA_IEN;     //接收数据中断使能 
 NVIC_ISER |= UART0_INT;     //使能串口0中断
}
/****************************************
*函数名称:UartSend
*输    入:pBuf     发送数据缓冲区
          unNumOfBytes  发送字节总数
*输    出:无
*功    能:串口发送数据
******************************************/
VOID UartSend(UINT8 *pBuf,UINT32 unNumOfBytes)
{
  UINT32 i; 
  for(i=0; i
  {
         UA0_THR = *(pBuf+i);
         while ((UA0_FSR&TX_EMPTY) != 0x00); //检查发送FIFO是否为空 
  }
}
/****************************************
*函数名称:UART0_IRQHandler
*输    入:无
*输    出:无
*功    能:串口0中断服务函数
******************************************/
VOID UART0_IRQHandler(VOID)
{
    UINT8 ucData;
 if(UA0_ISR & RDA_INT)     //检查是否接收数据中断
 {  
  while(UA0_ISR & RDA_IF)    //获取所有接收到的数据
  {
   while (UA0_FSR & RX_EMPTY);  //检查接收FIFO是否为空    
   ucData = UA0_RBR;    //读取数据
   UartSend(&ucData,1);   //发送数据
   //以下测试接收数据用
    if(ucData == 0x11)  P2_DOUT &= ~0xff;
    if(ucData == 0xff)  P2_DOUT |= 0xff;
  }
 }
}
/****************************************
*函数名称:main
*输    入:无
*输    出:无
*功    能:函数主体
******************************************/
INT32 main(VOID)
{
// unsigned char i,j;
     PROTECT_REG
  (            //ISP下载时保护FLASH存储器
   PWRCON |= XTL12M_EN;      //默认时钟源为外部晶振
   while((CLKSTATUS & XTL12M_STB) == 0);   //等待12MHz时钟稳定 
   CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //设置外部晶振为系统时钟
   //以下测试接收数据
   //P2_PMD=0x5555;          //GPIO设置为输出模式  
  )
  UartInit(12000000,9600);      //波特率设置为9600bps
  while(1)
  {
/*   j=0;
                //发送数据0~255
    for(i=0; i<256; i++)
    {
       UartSend(&j,1);
     j++;
     Delayms(50);   
    } */
  }
}
 

关键字:新唐M051  UART0

编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/2014/1211/article_17626.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:新唐M051外部中断1使用程序
下一篇:新唐M051 IIC使用程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

基于新唐M0516LAN的SD5128的驱动测试

最近测试了一个SD5128的驱动,感觉可以 利用M0516LAN的串口来实现,写了一下测试程序,请大家核对一下是否可行。谢谢大家。     附件源码如下: #include <stdio.h> #include "M051Series.h" #include "DriverDrvSYS.h" #include "DriverDrvUART.h" #include "DriverDrvGPIO.h" //SD5128的逻辑0是25%的高75%的低,逻辑1是75%的高25%的低,那就是相当于开始25%是固定低
发表于 2015-07-30

基于新唐M0的M0516LAN的SIM900A的驱动测试

基于新唐M0的M0516LAN的SIM900A的驱动测试 元旦放假,急于赶一个小项目,做了一个M0516LAN驱动SIM900A的测试。第一次用SIM900A,其中遇到几个小问题,调了好久,也问过群里用过SIM900A的几位朋友才调通,在此感谢。最弱智的问题是我把NRESET接到了PWM3上,然后又启动了PWM3,虽然后面把P43置成IO输出却不成功,然后大半晚上就那么悲剧掉了。新唐的库是置成了复用功能再想置回IO,需要先DrvGPIO_InitFunction(E_FUNC_GPIO);才能配置IO功能的。我后来还是不启动PWM就通过了开机过程。只要SIM900A开机了,NETLIGHT的LED就会闪烁,不管有没有SIM卡
发表于 2015-07-30

基于IAR EWARM开发新唐M0的CONFIG修改及NU-LINK驱动

基于IAR EWARM开发新唐M0的CONFIG修改及NU-LINK驱动 1,把下面的内容保存成文件“nuc1xx_APROM.board”: <?xml version="1.0" encoding="iso-8859-1"?> <flash_board>   <pass>     <loader>$TOOLKIT_DIR$configflashloaderNuvotonFlashNUC1xxxE.flash</loader>    
发表于 2015-07-30

基于新唐M0的DMX512-1990收发例程

在高时钟下不稳定 ?      有什么技术问题请与yuanxihua@21cn.com沟通。 附件:测试工程代码  9G-M0516.zip DMX512协议    DMX512控制协议.rar
发表于 2015-07-30

新唐M0的MDK+NU-LINK的半主机调试使用

启动新唐M0的semihost半主机调试: 利用NUC100SERIESBSP_CMSIS_V1.03.002建立的工程。 1,针对startup_NUC1xx.s文件的修改 A,第010行改为:SEMIHOSTED       SETL    {TRUE} ;SEMIHOSTED       SETL    {FALSE} B,第256行改为:;yuanxihua@21cn.com             
发表于 2015-07-30

新唐M0的ISP的要点

新唐M0的ISP的要点就是: 1,CPU的LDROM中要烧有ISP_LD_NUC100series.bin(针对NUC1XX)或者ISP_LD_M051series.bin(针对M05X); 2,CPU的CONFIG0要配置从LDROM启动,甚至要配置外部12M晶体(用USB下载做ISP); 3,CPU的UART0或者USB(NUC120,140)上要有线正确连接到PC上; 4,CPU的上电复位时,NUC1XX是INT1(PB15)或者M05X是INT0(P3.2)要接地,否则跳进APROM; 5,CPU进入了ISP后再用NuMicro ISP Writer V1.10.exe去连接CPU(选择对的COM口或者USB口
发表于 2015-07-30

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved