本文來源電子發(fā)燒友社區(qū),作者:xcs101, 帖子地址:https://bbs.elecfans.com/jishu_2244470_1_1.html
UART發(fā)送接收回環(huán)效果視頻(開發(fā)板體驗視頻,詳見作者原文鏈接內(nèi)容)
一、UART介紹
通用異步收發(fā)器(UART)提供了一種靈活的方法來與使用工業(yè)標準 NRZ 異步串行數(shù)據(jù)格式的外部設(shè)備之間進行全雙工數(shù)據(jù)交換。UART 利用分數(shù)波特率發(fā)生器提供寬范圍的波特率選擇。具備以下功能:
●全雙工的,異步通信
● NRZ 標準格式
● 分數(shù)波特率發(fā)生器系統(tǒng)
● 支持波特率自適應(yīng)
● 可編程數(shù)據(jù)字長度(8 位或 9 位)
● 單線半雙工通信
● 單獨的發(fā)送器和接收器使能位
● 檢測標志
● 傳輸結(jié)束標志
● 多處理器通信
芯片內(nèi)置四個 UART,UART1 支持 ISP下載程序,串口由 S0CON 控制,而實際傳輸?shù)臄?shù)據(jù)則在 S0BUF 寄存器中讀取或?qū)懭?。傳輸速度(波特率)是通過配置 uartdiv 來選擇的。
串口支持波特率自適應(yīng),通過測出 RX 引腳上接收信號的波特率并將其配置
到波特率寄存器中實現(xiàn)。使用方法如下:
1) 配置 MCU 和外設(shè)使用同一個時鐘來源;
(設(shè)置時鐘源選擇寄存器(CMU_CLK_SEL),選擇 MCU 和外設(shè)的時鐘源。)
2) 配置 baudtrim = 1,trim_en 寫 0;
3) 配置 baudtrim = 1,trim_en 寫 1;
4) RX 接收 UART 幀,幀中的低電平只能是 1 位寬;
5) 等到 trim_en 變?yōu)?0,讀出 trim_clk_result 的結(jié)果;
6) 使用 trim_clk_result 作為 uart 的波特率設(shè)置
二、UART相關(guān)函數(shù)
1、初始化函數(shù)
UART的初始化函數(shù)分2種模式:
- void UART_Init_case1(UART_TypeDef *UARTx); //非中斷模式
- void UART_Init_IT_case1(UART_TypeDef *UARTx); //中斷模式
相關(guān)設(shè)置直接在這兩個函數(shù)里面進行修改即可,下面看看非中斷模式:
需要注意的地方是demo里面的波特率是用16MHz時鐘計算出來的,開發(fā)板上用的是32MHz,使用時需要在對應(yīng)波特率上翻倍。
- void UART_Init_case1(UART_TypeDef *UARTx) //非中斷模式
- {
- if(UARTx==UART1)
- {
- GPIO_MODE_Init(GPIOA,PIN5,GPIO_MODE_AF);
- GPIO_MODE_Init(GPIOA,PIN6,GPIO_MODE_AF);
- GPIO_AF_Init(GPIOA,PIN5,GPIO_AF0);
- GPIO_AF_Init(GPIOA,PIN6,GPIO_AF0);
- }
- else if(UARTx==UART2)
- {
- GPIO_MODE_Init(GPIOA,PIN3,GPIO_MODE_AF);
- GPIO_MODE_Init(GPIOA,PIN4,GPIO_MODE_AF);
- GPIO_AF_Init(GPIOA,PIN3,GPIO_AF3);
- GPIO_AF_Init(GPIOA,PIN4,GPIO_AF3);
- }
- else if(UARTx==UART3)
- {
- GPIO_MODE_Init(GPIOA,PIN10,GPIO_MODE_AF);
- GPIO_MODE_Init(GPIOA,PIN11,GPIO_MODE_AF);
- GPIO_AF_Init(GPIOA,PIN10,GPIO_AF3);
- GPIO_AF_Init(GPIOA,PIN11,GPIO_AF3);
- }
- else if(UARTx==UART4)
- {
- GPIO_MODE_Init(GPIOA,PIN14,GPIO_MODE_AF);
- GPIO_MODE_Init(GPIOA,PIN15,GPIO_MODE_AF);
- GPIO_AF_Init(GPIOA,PIN14,GPIO_AF3);
- GPIO_AF_Init(GPIOA,PIN15,GPIO_AF3);
- }
- UARTx->CTRL = 0<<25? ?? ???//發(fā)送中斷使能: 0-off,1-on
- |0<<24? ?? ???//接收中斷使能:0-off,1-on
- |0x0116<<8? ? //波特率(對應(yīng)16M時鐘):
- //0x1a0b-2400,0x0683-9600,0x0341-19200,0x0116-57600,0x008b-115200
- //0x0045-230400,0x0023-460800(CSMISP未支持波特率0x0011-921600,0x000d-1128800)
- //波特率(對應(yīng)32M時鐘):
- //0x1a0b-4800,0x0683-19200,0x0341-38400,0x0116-115200,0x008b-230400
- //0x0045-460800(CSMISP未支持波特率0x0023-921600,0x0011-1843200,0x000d-2257600)
- |1<<6? ?? ?? ?//模式選擇:0-模式0,1-模式1,2/3-模式2
- |0<<5? ?? ?? ?//多處理器使能
- |1<<4? ?? ?? ?//接收使能
- |0<<3? ?? ?? ?//發(fā)送數(shù)據(jù)bit8
- |0<<2;? ?? ???//接收數(shù)據(jù)bit8
- }
2、發(fā)送接收函數(shù)
- void Uart_Send(UART_TypeDef *UARTx,uint8_t *packet,uint16_t lenth);//適用于非中斷發(fā)送模式
- void Uart_Reveive(UART_TypeDef *UARTx,uint8_t *packet,uint16_t lenth);//適用于非中斷發(fā)送模式
- void UART1_putchar(uint8_t ubyte);//數(shù)據(jù)放入緩存,適用于中斷模式
- uint8_t UART1_getchar(void);//取數(shù)據(jù)緩存
庫函數(shù)里已經(jīng)封裝好int ee_printf(const char *fmt, ...),可直接使用進行文本發(fā)送,也可以使用intprintf (const char *__restrict, ...) ,不過使用ee_printf生成的elf文件相對大一些。
三、程序設(shè)計
在main函數(shù)主循環(huán)里編寫以下程序,完成UART的接收發(fā)送回環(huán)實驗。
- uint8_t upack1[20] = {0,1,2,3,4,5,6,7,8,9};//定義一個數(shù)組
- Uart_Reveive(UART1,upack1,2);//適用于非中斷發(fā)送模式
- Uart_Send(UART1,upack1,2);//適用于非中斷發(fā)送模式
程序很簡單,接收函數(shù)定義了要接收的數(shù)據(jù)長度,接收完成后再將數(shù)據(jù)發(fā)送出去。
但是因為void Uart_Reveive(UART_TypeDef *UARTx,uint8_t *packet,uint16_t lenth);//適用于非中斷發(fā)送模式的原因,如果沒有接收到數(shù)據(jù),程序會一直處于等待接收狀態(tài),無法執(zhí)行下一步程序。
- void Uart_Reveive(UART_TypeDef *UARTx,uint8_t *packet,uint16_t lenth)//適用于非中斷發(fā)送模式
- {
- for(uint16_t i=0;i< lenth;i++)
- {
- while(!(UARTx->CTRL&0x00000001));//如果沒有接收到數(shù)據(jù)
- !(UARTx->CTRL&0x00000001)
- =1
- packet[i] = UARTx->DATA;
- UARTx->CTRL |= 0x00000001U;
- }
- }
四、效果展示
使用CSM-ISP對結(jié)果進行驗證,發(fā)送20H 22H,能夠返回20H 22H,程序成功運行。
在驗證過程中發(fā)現(xiàn),采用HEX模式發(fā)送非HEX數(shù)據(jù),例如“LED”會導(dǎo)致CSM-ISP軟件奔潰,建議調(diào)試UART時,使用sscom進行調(diào)試。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
uart
+關(guān)注
關(guān)注
22文章
1199瀏覽量
100829 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
4771瀏覽量
96174 -
sscom
+關(guān)注
關(guān)注
0文章
4瀏覽量
4011 -
南京中科微
+關(guān)注
關(guān)注
0文章
60瀏覽量
708 -
CSM32RV20
+關(guān)注
關(guān)注
0文章
40瀏覽量
192
發(fā)布評論請先 登錄
相關(guān)推薦
CSM32RV003開發(fā)板的按鍵及timer1溢出中斷的應(yīng)用
1、前言
申請的CSM32RV003開發(fā)板研究好長一段時間了,但是還有不少問題需要解決,一點一點的啃,終于把I/O口和timer1溢出中斷弄得差不多了,這里感謝南京中科
發(fā)表于 10-30 10:46
哪位大佬能提供一下中科微CSM32RV003單片機開發(fā)系統(tǒng)中g(shù)pio.h文件的中文解釋,及用法
初學(xué)南京中科微CSM32RV003單片機,對其龐大的h文件庫和C文件庫搞得一頭霧水,即使有高手指點一二,也是很困難,但搞清了h文件庫,C文件也就明白了,這些對入門的人來說算不了什么,但
發(fā)表于 10-26 09:47
CSM32RV003 單片機輸入功能的使用
前言
大家好。
首先,感謝南京中科微提供的CSM32RV003開發(fā)板及cjlink調(diào)試器,同時也感謝發(fā)燒友提供的
發(fā)表于 10-25 16:13
【中科微CSM32RV003綠色開發(fā)板免費體驗】IDE使用及流水燈程序演示
【RISC-V】中科微CSM32RV003綠色開發(fā)板IDE使用及流水燈程序演示
流水燈代碼
#include \"headfile.h\"
int main(void
發(fā)表于 10-23 19:26
【中科微CSM32RV003綠色開發(fā)板免費體驗】環(huán)境配置
【CSM32RV003】中科微CSM32RV003綠色開發(fā)板環(huán)境配置
視頻中詳細介紹了開發(fā)板及
發(fā)表于 10-23 19:17
【LuckFox Pico Plus開發(fā)板免費試用】+開發(fā)板上手
LuckFox Pico的試用機會,這款開發(fā)板相當于是RV1103的小型評估板,引出了所有的IO口,并且?guī)б蕴W(wǎng)/USB/攝像頭等高速接口。下面一起來看一下。
【中科微CSM32RV003綠色開發(fā)板免費體驗】3.使用流程
和試用機會,非常感謝電子發(fā)燒友論壇!
南京中科微公司CSM32RV003開發(fā)板使用心得體會
這篇
發(fā)表于 10-14 00:05
【中科微CSM32RV003綠色開發(fā)板免費體驗】+環(huán)境安裝與第一個示例程序測試
需要對中科微CSM32RV003綠色開發(fā)板進行開發(fā)測試,首先需要建立開發(fā)環(huán)境。
發(fā)表于 10-11 10:09
【中科微CSM32RV003綠色開發(fā)板免費體驗】+ISP下載測試
在收到中科微的CSM32RV003綠色開發(fā)板后,首先到官網(wǎng)和技術(shù)支持微信群尋找資料。要實現(xiàn)
發(fā)表于 10-11 08:58
【中科微CSM32RV003綠色開發(fā)板免費體驗】2.RISC-V RV32IMAC內(nèi)核
CSM32RV003綠色開發(fā)板免費體驗】1.上手
我要感謝南京中科微電子有限公司提供的CSM32RV003綠色
發(fā)表于 10-10 00:03
【中科微CSM32RV003綠色開發(fā)板免費體驗】 開箱和安裝工具帖
我申請項目:滑翔傘空中速率計。
我于2023年9月9日下午收到中科微CSM32RV003開發(fā)板快遞包裹。拿回后立馬打開包裹,出現(xiàn)南京
發(fā)表于 10-09 23:34
【中科微CSM32RV003綠色開發(fā)板免費體驗】1.上手
首先,我要感謝南京中科微電子有限公司提供的CSM32RV003綠色開發(fā)板和試用機會,這讓我有機會深入了解并使用該公司的產(chǎn)品。經(jīng)過幾天的熟悉和
發(fā)表于 10-09 23:21
【中科微CSM32RV003綠色開發(fā)板免費體驗】開發(fā)板使用3彩燈
接上文 【中科微CSM32RV003綠色開發(fā)板免費體驗】開發(fā)板使用2
官方例程SYSTICK_Interrupt\\\\SYSTICK_In
發(fā)表于 09-28 07:04
【中科微CSM32RV003綠色開發(fā)板免費體驗】第二貼-CSM Stduio使用、ISP下載固件及C-Jlink進行調(diào)試
非常感謝南京中科微提供的試用機會,經(jīng)過幾天的熟悉,本期將對CSM Studio的基礎(chǔ)使用、CSM
發(fā)表于 09-27 20:26
評論