一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【南京中科微CSM32RV20開發(fā)板試用體驗】UART的簡單應用,實現(xiàn)數(shù)據(jù)發(fā)送接收

開發(fā)板試用精選 ? 來源:開發(fā)板試用 ? 作者:電子發(fā)燒友論壇 ? 2022-11-30 11:09 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文來源電子發(fā)燒友社區(qū),作者:xcs101, 帖子地址:https://bbs.elecfans.com/jishu_2244470_1_1.html

UART發(fā)送接收回環(huán)效果視頻(開發(fā)板體驗視頻,詳見作者原文鏈接內(nèi)容)

本帖最后由 xcs101 于 2022-1-21 10:本次實驗還是延續(xù)之前的點亮一個LED的例程,該程序本身已對UART進行初始化。
一、UART介紹
通用異步收發(fā)器(UART)提供了一種靈活的方法來與使用工業(yè)標準 NRZ 異步串行數(shù)據(jù)格式的外部設(shè)備之間進行全雙工數(shù)據(jù)交換。UART 利用分數(shù)波特率發(fā)生器提供寬范圍的波特率選擇。具備以下功能:
●全雙工的,異步通信
● NRZ 標準格式
● 分數(shù)波特率發(fā)生器系統(tǒng)
● 支持波特率自適應
● 可編程數(shù)據(jù)字長度(8 位或 9 位)
● 單線半雙工通信
● 單獨的發(fā)送器和接收器使能位
● 檢測標志
● 傳輸結(jié)束標志
● 多處理器通信

芯片內(nèi)置四個 UART,UART1 支持 ISP下載程序,串口由 S0CON 控制,而實際傳輸?shù)臄?shù)據(jù)則在 S0BUF 寄存器中讀取或?qū)懭搿鬏斔俣龋úㄌ芈剩┦峭ㄟ^配置 uartdiv 來選擇的。
串口支持波特率自適應,通過測出 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種模式:


  1. void UART_Init_case1(UART_TypeDef *UARTx); //非中斷模式
  2. void UART_Init_IT_case1(UART_TypeDef *UARTx); //中斷模式
復制代碼

相關(guān)設(shè)置直接在這兩個函數(shù)里面進行修改即可,下面看看非中斷模式:

需要注意的地方是demo里面的波特率是用16MHz時鐘計算出來的,開發(fā)板上用的是32MHz,使用時需要在對應波特率上翻倍。
pYYBAGHpJrmAHkx5AACu3zGQZls773.png



  1. void UART_Init_case1(UART_TypeDef *UARTx) //非中斷模式
  2. {
  3. if(UARTx==UART1)
  4. {
  5. GPIO_MODE_Init(GPIOA,PIN5,GPIO_MODE_AF);
  6. GPIO_MODE_Init(GPIOA,PIN6,GPIO_MODE_AF);
  7. GPIO_AF_Init(GPIOA,PIN5,GPIO_AF0);
  8. GPIO_AF_Init(GPIOA,PIN6,GPIO_AF0);
  9. }
  10. else if(UARTx==UART2)
  11. {
  12. GPIO_MODE_Init(GPIOA,PIN3,GPIO_MODE_AF);
  13. GPIO_MODE_Init(GPIOA,PIN4,GPIO_MODE_AF);
  14. GPIO_AF_Init(GPIOA,PIN3,GPIO_AF3);
  15. GPIO_AF_Init(GPIOA,PIN4,GPIO_AF3);
  16. }
  17. else if(UARTx==UART3)
  18. {
  19. GPIO_MODE_Init(GPIOA,PIN10,GPIO_MODE_AF);
  20. GPIO_MODE_Init(GPIOA,PIN11,GPIO_MODE_AF);
  21. GPIO_AF_Init(GPIOA,PIN10,GPIO_AF3);
  22. GPIO_AF_Init(GPIOA,PIN11,GPIO_AF3);
  23. }
  24. else if(UARTx==UART4)
  25. {
  26. GPIO_MODE_Init(GPIOA,PIN14,GPIO_MODE_AF);
  27. GPIO_MODE_Init(GPIOA,PIN15,GPIO_MODE_AF);
  28. GPIO_AF_Init(GPIOA,PIN14,GPIO_AF3);
  29. GPIO_AF_Init(GPIOA,PIN15,GPIO_AF3);
  30. }
  31. UARTx->CTRL = 0<<25? ?? ???//發(fā)送中斷使能: 0-off,1-on
  32. |0<<24? ?? ???//接收中斷使能:0-off,1-on
  33. |0x0116<<8? ? //波特率(對應16M時鐘):
  34. //0x1a0b-2400,0x0683-9600,0x0341-19200,0x0116-57600,0x008b-115200
  35. //0x0045-230400,0x0023-460800(CSMISP未支持波特率0x0011-921600,0x000d-1128800)
  36. //波特率(對應32M時鐘):
  37. //0x1a0b-4800,0x0683-19200,0x0341-38400,0x0116-115200,0x008b-230400
  38. //0x0045-460800(CSMISP未支持波特率0x0023-921600,0x0011-1843200,0x000d-2257600)
  39. |1<<6? ?? ?? ?//模式選擇:0-模式0,1-模式1,2/3-模式2
  40. |0<<5? ?? ?? ?//多處理器使能
  41. |1<<4? ?? ?? ?//接收使能
  42. |0<<3? ?? ?? ?//發(fā)送數(shù)據(jù)bit8
  43. |0<<2;? ?? ???//接收數(shù)據(jù)bit8
  44. }
復制代碼



2、發(fā)送接收函數(shù)


  1. void Uart_Send(UART_TypeDef *UARTx,uint8_t *packet,uint16_t lenth);//適用于非中斷發(fā)送模式
  2. void Uart_Reveive(UART_TypeDef *UARTx,uint8_t *packet,uint16_t lenth);//適用于非中斷發(fā)送模式
  3. void UART1_putchar(uint8_t ubyte);//數(shù)據(jù)放入緩存,適用于中斷模式
  4. 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)實驗。


  1. uint8_t upack1[20] = {0,1,2,3,4,5,6,7,8,9};//定義一個數(shù)組
  2. Uart_Reveive(UART1,upack1,2);//適用于非中斷發(fā)送模式
  3. 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í)行下一步程序。


  1. void Uart_Reveive(UART_TypeDef *UARTx,uint8_t *packet,uint16_t lenth)//適用于非中斷發(fā)送模式
  2. {
  3. for(uint16_t i=0;i< lenth;i++)
  4. {
  5. while(!(UARTx->CTRL&0x00000001));//如果沒有接收到數(shù)據(jù)
  6. !(UARTx->CTRL&0x00000001)
  7. =1
  8. packet[i] = UARTx->DATA;
  9. UARTx->CTRL |= 0x00000001U;
  10. }
  11. }
復制代碼


四、效果展示
poYBAGHpkgCAO53fABGEPVxAzbw251.gif

使用CSM-ISP對結(jié)果進行驗證,發(fā)送20H 22H,能夠返回20H 22H,程序成功運行。
在驗證過程中發(fā)現(xiàn),采用HEX模式發(fā)送非HEX數(shù)據(jù),例如“LED”會導致CSM-ISP軟件奔潰,建議調(diào)試UART時,使用sscom進行調(diào)試。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • uart
    +關(guān)注

    關(guān)注

    22

    文章

    1276

    瀏覽量

    103911
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5679

    瀏覽量

    104628
  • sscom
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    4126
  • 南京中科微
    +關(guān)注

    關(guān)注

    0

    文章

    60

    瀏覽量

    1105
  • CSM32RV20
    +關(guān)注

    關(guān)注

    0

    文章

    40

    瀏覽量

    349
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    有獎丨米爾 瑞芯RK3506開發(fā)板免費試用來啦!

    米爾與瑞芯合作發(fā)布的新品基于瑞芯RK3506應用處理器的MYD-YR3506開發(fā)板免費試用名額增加啦
    的頭像 發(fā)表于 07-10 08:03 ?135次閱讀
    有獎丨米爾 瑞芯<b class='flag-5'>微</b>RK3506<b class='flag-5'>開發(fā)板</b>免費<b class='flag-5'>試用</b>來啦!

    【Banana Pi BPI-RV2開發(fā)板試用體驗】開箱上電

    BPI-RV2 RISC-V開源路由器之開箱上電 背景 現(xiàn)在剛好正在研究短距及網(wǎng)絡(luò)相關(guān)的東東。 最近剛好有幸得到了一塊香蕉派 BPI-RV2 RISC-V 開源路由器開發(fā)板。感謝電子發(fā)燒友
    發(fā)表于 06-26 19:51

    有獎丨米爾 瑞芯RK3506開發(fā)板免費試用

    米爾與瑞芯合作發(fā)布的新品基于瑞芯RK3506應用處理器的MYD-YR3506開發(fā)板免費試用名額來啦~~米爾提供了3塊價值299元的MYD-YR3506
    的頭像 發(fā)表于 06-19 08:04 ?360次閱讀
    有獎丨米爾 瑞芯<b class='flag-5'>微</b>RK3506<b class='flag-5'>開發(fā)板</b>免費<b class='flag-5'>試用</b>

    愛芯32位MCU開發(fā)板AiP32RV15X介紹

    AiP32RV15X開發(fā)板是一款基于RISCV內(nèi)核的32位MCU開發(fā)板,提供了板載調(diào)試器、RESET、WAKEUP按鍵、三色LED、CAN收發(fā)器、USB接口、UART、ADC、SPI、
    的頭像 發(fā)表于 06-17 10:54 ?280次閱讀
    中<b class='flag-5'>微</b>愛芯32位MCU<b class='flag-5'>開發(fā)板</b>AiP32<b class='flag-5'>RV</b>15X介紹

    有獎丨米爾 瑞芯RK3562開發(fā)板免費試用新增名額!

    米爾與瑞芯合作發(fā)布的新品基于瑞芯RK3562應用處理器的MYD-YR3562開發(fā)板免費試用名額增加
    的頭像 發(fā)表于 06-13 08:04 ?395次閱讀
    有獎丨米爾 瑞芯<b class='flag-5'>微</b>RK3562<b class='flag-5'>開發(fā)板</b>免費<b class='flag-5'>試用</b>新增名額!

    性能強悍!合眾HZ-RK3568開發(fā)板試用體驗

    月19日 ? 評測數(shù)量: 10塊 ? 更多熱點文章閱讀 基于平頭哥TH1520芯片,潤開鴻HH-SCDAYU800A開發(fā)板免費試用 RISC-V開發(fā)板深度評測!頂級開發(fā)板免費
    的頭像 發(fā)表于 06-05 16:30 ?521次閱讀
    性能強悍!合眾HZ-RK3568<b class='flag-5'>開發(fā)板</b><b class='flag-5'>試用</b>體驗

    【評測試用】合眾HZ-T536開發(fā)板免費試用體驗

    【評測試用】合眾HZ-T536開發(fā)板免費試用體驗
    的頭像 發(fā)表于 05-27 08:05 ?220次閱讀
    【評測<b class='flag-5'>試用</b>】合眾HZ-T536<b class='flag-5'>開發(fā)板</b>免費<b class='flag-5'>試用</b>體驗

    基于RV1126開發(fā)板實現(xiàn)網(wǎng)絡(luò)攝像頭方案

    RV1126開發(fā)板實現(xiàn)開發(fā)實例,抓取攝像頭數(shù)據(jù)、圖像送入編碼器進行編碼壓縮、以及把壓縮后的數(shù)據(jù)
    的頭像 發(fā)表于 04-21 14:56 ?506次閱讀
    基于<b class='flag-5'>RV</b>1126<b class='flag-5'>開發(fā)板實現(xiàn)</b>網(wǎng)絡(luò)攝像頭方案

    基于RV1126開發(fā)板實現(xiàn)駕駛員行為檢測方案

    RV1126開發(fā)板實現(xiàn)駕駛員行為檢測:通過圖像識別出這幾種行為:打電話、抽煙、疲勞駕駛。
    的頭像 發(fā)表于 04-18 17:47 ?354次閱讀
    基于<b class='flag-5'>RV</b>1126<b class='flag-5'>開發(fā)板實現(xiàn)</b>駕駛員行為檢測方案

    基于RV1126開發(fā)板的按鍵測試方法與例程

    RV1126開發(fā)板的按鍵測試方法與例程詳細描述
    的頭像 發(fā)表于 04-15 17:03 ?351次閱讀
    基于<b class='flag-5'>RV</b>1126<b class='flag-5'>開發(fā)板</b>的按鍵測試方法與例程

    RV1126 實現(xiàn)簡單的UI開發(fā)示例

    RV1126上實現(xiàn)簡單的UI開發(fā)實例
    的頭像 發(fā)表于 04-09 16:08 ?404次閱讀
    <b class='flag-5'>RV</b>1126 <b class='flag-5'>實現(xiàn)</b><b class='flag-5'>簡單</b>的UI<b class='flag-5'>開發(fā)</b>示例

    有獎丨米爾 瑞芯YR3562開發(fā)板免費試用

    米爾與瑞芯合作發(fā)布的新品基于瑞芯RK3562應用處理器的MYD-YR3562開發(fā)板免費試用活動來啦~~米爾提供了3塊價值599元的MYD-YR3562
    的頭像 發(fā)表于 03-20 08:05 ?517次閱讀
    有獎丨米爾 瑞芯<b class='flag-5'>微</b>YR3562<b class='flag-5'>開發(fā)板</b>免費<b class='flag-5'>試用</b>

    追加名額丨米爾瑞芯RK3576開發(fā)板有獎試用

    米爾與瑞芯合作發(fā)布的新品基于瑞芯RK3576應用處理器的MYD-LR3576開發(fā)板免費試用活動加碼啦~~米爾追加了2塊價值849元的MYD-LR3576
    的頭像 發(fā)表于 11-22 01:00 ?633次閱讀
    追加名額丨米爾瑞芯<b class='flag-5'>微</b>RK3576<b class='flag-5'>開發(fā)板</b>有獎<b class='flag-5'>試用</b>

    常用在工業(yè)控制系統(tǒng)上的MCU芯片資料:CSM32RV20

    CSM32RV20是一款基于RISC-V核的低功耗MCU芯片。 內(nèi)置RISC-V RV32IMAC內(nèi)核(2.6CoreMark/MHz); 蕞高32MHz工作頻率; 內(nèi)置4kB的SRAM; 內(nèi)置8B
    的頭像 發(fā)表于 11-15 17:19 ?704次閱讀
    常用在工業(yè)控制系統(tǒng)上的MCU芯片資料:<b class='flag-5'>CSM32RV20</b>

    有獎丨米爾 瑞芯RK3576開發(fā)板免費試用

    米爾與瑞芯合作發(fā)布的新品基于瑞芯RK3576應用處理器的MYD-LR3576開發(fā)板免費試用活動來啦~~米爾提供了7塊價值849元的MYD-LR3576
    的頭像 發(fā)表于 11-12 01:00 ?802次閱讀
    有獎丨米爾 瑞芯<b class='flag-5'>微</b>RK3576<b class='flag-5'>開發(fā)板</b>免費<b class='flag-5'>試用</b>