本文来源电子发烧友社区,作者:王琳, 帖子地址: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浏览量
1367 -
CSM32RV20
+关注
关注
0文章
40浏览量
459
发布评论请先 登录
相关推荐
热点推荐
EASY EAI Nano-TB(RV1126B)开发板试用】1、初识
非常感谢电子发烧友以及灵眸科技给了我这次试用EASY EAI Nano-TB(RV1126B)开发板的机会,星期四确认了我的试用机会,星期五就收到了
发表于 11-16 11:15
【作品合集】中科昊芯Core_DSC280025C开发板测评
的应用
【中科昊芯Core_DSC280025C开发板试用体验】---外部中断问题
第一期合集: 微五科技CF5010RBT60
发表于 09-18 10:52
【作品精选】2025电子发烧友开发板测评大赛作品合集!
Milk-V Duo S 开发板免费试用
玄铁Banana Pi BPI-RV2开发板试用
玄铁Banana Pi BPI-CanMV-K2
发表于 09-03 15:24
【Banana Pi BPI-RV2开发板试用体验】开发环境搭建
参考
https://docs.banana-pi.org/zh/BPI-RV2/BananaPi_BPI-RV2
前言
本文分享开发板基本的ssh登录,文件传输,c开发环境搭建。
上
发表于 06-25 16:07
有奖丨米尔 瑞芯微RK3506开发板免费试用
米尔与瑞芯微合作发布的新品基于瑞芯微RK3506应用处理器的MYD-YR3506开发板免费试用名额来啦~~米尔提供了3块价值299元的MYD-YR3506
中微爱芯32位MCU开发板AiP32RV15X介绍
AiP32RV15X开发板是一款基于RISCV内核的32位MCU开发板,提供了板载调试器、RESET、WAKEUP按键、三色LED、CAN收发器、USB接口、UART、ADC、SPI、
有奖丨米尔 瑞芯微YR3562开发板免费试用
米尔与瑞芯微合作发布的新品基于瑞芯微RK3562应用处理器的MYD-YR3562开发板免费试用活动来啦~~米尔提供了3块价值599元的MYD-YR3562
串口中断是内部中断还是外部中断,串口中断是怎么触发的
串口中断通常被视为外部中断。虽然串口控制器(如USART、UART等)可能集成在微控制器或处理器的内部,但从中断的角度来看,串口中断是由处理
串口中断需要清除标志位吗,串口中断标志位会自动清除吗
在电子通信领域,串口中断作为一种重要的通信机制,广泛应用于各种嵌入式系统和计算机设备中。串口中断标志位的管理,尤其是是否需要手动清除以及是否会自动清除,是理解和实现串口通信的关键环节。

【南京中科微CSM32RV20开发板试用体验】串口中断收发
评论