#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
关键字:新唐M051 UART0
引用地址:新唐M051 UART0使用程序
{
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外部中断1使用程序
下一篇:新唐M051 IIC使用程序
小广播
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐
最新单片机文章
更多热门文章
更多每日新闻
更多往期活动
11月22日历史上的今天
- Melexis 凭借MeLiBu 助力实现汽车照明差异化,为细分市场的车辆带来更高吸引力
- Nexperia表面贴装器件通过汽车应用的板级可靠性要求
- 汽车电气化竞争:获胜的途径
- 政策利好!工信部正牵头制定“十四五”机器人产业发展规划
- 工业机器人的应用场景有哪些?工业机器人应用场景盘点
- 手术机器人公司Procept BioRobotics本周上市 拟筹资1.27亿美元
- 2021Medtec中国展首次线上商务配对活动及同期线上会议结束
- 智能 LED 灯泡通过连接设备或语音命令进行照明控制
- Digi-Key推进分销来自 Renesas 和 Dialog 的致胜产品组合
- 伟大的时代呼唤伟大的自主创新-热烈祝贺伟景人形智能机器人正式发布
厂商技术中心