本文來源電子發燒友社區,作者:王琳, 帖子地址: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瀏覽量
1431 -
CSM32RV20
+關注
關注
0文章
40瀏覽量
497
發布評論請先 登錄
相關推薦
熱點推薦
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
【作品合集】微五科技CF5010RBT60開發板測評
CF5010RBT60開發板試用體驗】打印串口無輸出問題解決(更正,原理圖中使用的是USART1不是UART4)
【微五科技CF5010RBT60開
發表于 09-01 14:48
【干貨分享】在 RA-Eco-RA6M4開發板上實現 ADC 電壓的 LabVIEW 數據采集
本文介紹了RA-Eco-RA6M4-100PIN-V1.0開發板通過LabVIEW上位機實現ADC電壓數據采集的項目設計,采用串口發送和串口中斷查詢兩種方案。
【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、
性能強悍!合眾HZ-RK3568開發板試用體驗
月19日 ? 評測數量: 10塊 ? 更多熱點文章閱讀 基于平頭哥TH1520芯片,潤開鴻HH-SCDAYU800A開發板免費試用 RISC-V開發板深度評測!頂級開發板免費
有獎丨米爾 瑞芯微YR3562開發板免費試用
米爾與瑞芯微合作發布的新品基于瑞芯微RK3562應用處理器的MYD-YR3562開發板免費試用活動來啦~~米爾提供了3塊價值599元的MYD-YR3562
【南京中科微CSM32RV20開發板試用體驗】串口中斷收發
評論