本文来源电子发烧友社区,作者:王琳, 帖子地址:https://bbs.elecfans.com/jishu_2251612_1_1.html
收到开发板之后,发现下载工具集成了串口调试助手,这个还是挺不错了。demo程序是查询方式实现串口打印。对于调试是没有问题的。但是如果串口用于MODBUS或者其他的一些应用,基本都是中断方式。
收到开发板之后,发现下载工具集成了串口调试助手,这个还是挺不错了。demo程序是查询方式实现串口打印。对于调试是没有问题的。但是如果串口用于MODBUS或者其他的一些应用,基本都是中断方式。
首先用中断方式的DEMO程序,似乎无法调通,于是用自己的方式调试串口。首先看看datasheet。居然只有四个寄存器,非常容易上手。
1.用下载工具提供的串口助手发送给MCU,MCU再把数据打印出来。
///----System Init --------------------------------------------------------------------------
CLIC_Init();//系统中断配置
System_clock_Init();//系统时钟初始化
SYS_Interrupt_Enable();//CLIC开总中断
此部分仍采用demo程序。
//初始化串口
UART_Init_IT_case1(UART2);//中断模式
做一些简单修改,使能接收
UARTx->CTRL = 0<<25 //发送中断使能: 0-off,1-on
|1<<24 //接收中断使能:0-off,1-on
|0x0116<<8 //波特率(对应16M时钟):
//0x1a0b-2400,0x0683-9600,0x0341-19200,0x0116-57600,0x008b-115200
//0x0045-230400,0x0023-460800,0x0011-921600,0x000d-1128800
|1<<6 //模式选择:0-模式0,1-模式1,2/3-模式2
|0<<5 //多处理器使能
|1<<4 //接收使能
|0<<3 //发送数据bit8
|0<<2; //接收数据bit8
//写几行代码,处理发送和接收
发送数据:
void INE_vWriteData(uint8_t u8TxData)
{
uint32_t u32TempValue = 0;
u32TempValue = (1<< 25);
UART2->DATA = u8TxData;
UART2->CTRL = UART2->CTRL|u32TempValue;
}
先把数据放进寄存器,再使能发送
接收数据:
void UART1_IRQhandler(void)
{
uint32_t u32TempValue = 0;
uint32_t u32TempValue2 = 0;
uint8_t i = 0;
if(UART1->CTRL&0x1)//接收中断标志
{
//IRQ Hander......
INE_u8RecBuf[i++] = UART1->DATA;
//INE_u8RecBuf[0] = 2;
INE_u8Length = i;
//u32TempValue2 = (1<< 24);
///u32TempValue2 = ~u32TempValue;
//UART1->CTRL = UART1->CTRL&u32TempValue;
UART1->CTRL = (UART1->CTRL|0x01);//清除接收中断
}
if(UART1->CTRL&0x2)//发送中断标志
{
UART1->CTRL = (UART1->CTRL&0xfffffffe)|0x2;//清除发送中断
//IRQ Hander......
u32TempValue = (1<< 25);
u32TempValue = ~u32TempValue;
UART1->CTRL = UART1->CTRL&u32TempValue;
}
}
接收数据放在中断函数内部,同时清中断标志位。
对于发送来说,发送结束,同样清发送完成中断标志,并关闭发送使能位。
main函数打印数据
for (uint8_t i=0; i< INE_u8Length; i ++)
{
INE_vWriteData(INE_u8RecBuf); } INE_u8Length = 0;由于只想DEMO一下收发功能,所以支持收发一个字节。
CLIC_Init();//系统中断配置
System_clock_Init();//系统时钟初始化
SYS_Interrupt_Enable();//CLIC开总中断
此部分仍采用demo程序。
//初始化串口
UART_Init_IT_case1(UART2);//中断模式
做一些简单修改,使能接收
UARTx->CTRL = 0<<25 //发送中断使能: 0-off,1-on
|1<<24 //接收中断使能:0-off,1-on
|0x0116<<8 //波特率(对应16M时钟):
//0x1a0b-2400,0x0683-9600,0x0341-19200,0x0116-57600,0x008b-115200
//0x0045-230400,0x0023-460800,0x0011-921600,0x000d-1128800
|1<<6 //模式选择:0-模式0,1-模式1,2/3-模式2
|0<<5 //多处理器使能
|1<<4 //接收使能
|0<<3 //发送数据bit8
|0<<2; //接收数据bit8
//写几行代码,处理发送和接收
发送数据:
void INE_vWriteData(uint8_t u8TxData)
{
uint32_t u32TempValue = 0;
u32TempValue = (1<< 25);
UART2->DATA = u8TxData;
UART2->CTRL = UART2->CTRL|u32TempValue;
}
先把数据放进寄存器,再使能发送
接收数据:
void UART1_IRQhandler(void)
{
uint32_t u32TempValue = 0;
uint32_t u32TempValue2 = 0;
uint8_t i = 0;
if(UART1->CTRL&0x1)//接收中断标志
{
//IRQ Hander......
INE_u8RecBuf[i++] = UART1->DATA;
//INE_u8RecBuf[0] = 2;
INE_u8Length = i;
//u32TempValue2 = (1<< 24);
///u32TempValue2 = ~u32TempValue;
//UART1->CTRL = UART1->CTRL&u32TempValue;
UART1->CTRL = (UART1->CTRL|0x01);//清除接收中断
}
if(UART1->CTRL&0x2)//发送中断标志
{
UART1->CTRL = (UART1->CTRL&0xfffffffe)|0x2;//清除发送中断
//IRQ Hander......
u32TempValue = (1<< 25);
u32TempValue = ~u32TempValue;
UART1->CTRL = UART1->CTRL&u32TempValue;
}
}
接收数据放在中断函数内部,同时清中断标志位。
对于发送来说,发送结束,同样清发送完成中断标志,并关闭发送使能位。
main函数打印数据
for (uint8_t i=0; i< INE_u8Length; i ++)
{
INE_vWriteData(INE_u8RecBuf); } INE_u8Length = 0;由于只想DEMO一下收发功能,所以支持收发一个字节。
2.切换到串口2,修改代码并用串口调试助手发送数据,打印数据。
总结:
1.串口寄存器简单易用,非常适合简单的应用场合。
2.同时datasheet过于简单,甚至找不到串口内部的逻辑图。
3.也正是由于过于简单,恐怕难以实现一些特殊的灵活应用。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
南京中科微
+关注
关注
0文章
60浏览量
645 -
CSM32RV20
+关注
关注
0文章
40浏览量
177
发布评论请先 登录
相关推荐
【中科微CSM32RV003绿色开发板免费体验】+ISP下载测试
在收到中科微的CSM32RV003绿色开发板后,首先到官网和技术支持微信群寻找资料。要实现CSM32RV
发表于 10-11 08:58
【中科微CSM32RV003绿色开发板免费体验】2.RISC-V RV32IMAC内核
CSM32RV003绿色开发板免费体验】1.上手
我要感谢南京中科微电子有限公司提供的CSM32RV003绿色
发表于 10-10 00:03
【中科微CSM32RV003绿色开发板免费体验】 开箱和安装工具帖
我申请项目:滑翔伞空中速率计。
我于2023年9月9日下午收到中科微CSM32RV003开发板快递包裹。拿回后立马打开包裹,出现南京
发表于 10-09 23:34
【中科微CSM32RV003绿色开发板免费体验】1.上手
首先,我要感谢南京中科微电子有限公司提供的CSM32RV003绿色开发板和试用机会,这让我有机会深入了解并使用该公司的产品。经过几天的熟悉和
发表于 10-09 23:21
【中科微CSM32RV003绿色开发板免费体验】了解和认识中科微CSM32RV003绿色开发板
℃;● 支持 TSSOP20/QFN20 封装。
中科微CSM32RV003绿色开发板上电,
发表于 09-22 16:56
【中科微CSM32RV003绿色开发板免费体验】中科微CSM32RV003绿色开发板初次使用测试
今天拿到中科微CSM32RV003绿色开发板做一下上电及初次使用的介绍视频及文字介绍,
中科微
发表于 09-22 16:35
【中科微CSM32RV003绿色开发板免费体验】中科微CSM32RV003绿色开发板初体验
收到南京中科微的CSM32RV003绿色开发板,板子做的很小巧,绿色阻焊也很漂亮,板子布局合理,功能也很强大。
发表于 09-22 16:25
试用南京中科微电子CSM32RV003开发板
非常迅速头一天接收信息,第二天雨中快递送到南京中科微电子有限公司CSM32RV003开发板(TSSOP20)封装的RISC-V处理器芯片。迷
发表于 09-09 19:01
评论