衡阳派盒市场营销有限公司

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

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

3天內不再提示

RT-Thread Nano入門:串口接收與消息隊列

CHANBAEK ? 來源:MrZhou的技術棧 ? 作者: zzx_mcu ? 2023-11-22 11:07 ? 次閱讀

本文主要介紹怎么用RT-Thread Nano的消息隊列方式實現串口數據接收,結合串口接收中斷和空閑中斷,接收上位機發來的一幀數據。

一、準備工作

1.硬件準備:

STM32F103RCT6(本人使用正點原子的MINI板)

ST-LINK

USB轉TTL模塊

2.軟件準備:

KEIL5 MDK

STM32CubeMX

二、使用STM32CubeMX生成MDK工程

使用STM32CubeMX創建STM32F103RCT6的對應工程,配置時鐘源,使能GPIO、USART,配置時鐘樹,開啟USART3中斷。

1.配置預覽效果,配置PA8引腳為推挽輸出,用于LED燈閃爍。

圖片

2.使能USART引腳,并開啟USART3中斷。

圖片

3.STM32F103RCT6的最大主頻為72M,配置PLL選擇外部時鐘。

圖片

4.生成KEIL MDK工程。

圖片

三、編寫代碼

對STM32CubeMX生成的工程稍作修改,注釋main.c中的HAL_Init()和SystemClock_Config()。

1.在STM32CubeMX生成的usart.c中添加以下兩句代碼,將USART初始化函數使用自動初始化的宏添加到RTT中進行初始化,當然你也可以直接在main.c調用初始化,看個人習慣。

image.png

2.新建一個usart_test文件,在里面編寫串口接收的相關的代碼,創建串口接收線程、消息隊列,并使用MSH_CMD_EXPORT()將函數注冊到FinSH中。

image.png

3.USART線程

從消息隊列中將接收到的數據發送到上位機。

image.png

4.USART中斷服務函數

函數分為兩個部分,我們前面開啟了兩個USART中斷,接收中斷與空閑中斷,分別對接收到的數據做不同處理,接收中斷將數據存入recv_buf,空閑中斷等待上位機數據發送結束后觸發,往recv_buf中插入結束字符,并將接收到的數據插入到消息隊列。

void HAL_UART_RxCallback(UART_HandleTypeDef*huart)
{
   /* 判斷是哪個串口觸發的中斷 */
   if(huart - >Instance == USART3)
    {          
        if(HAL_UART_Receive(&huart3,&recByte,1,10)==  HAL_OK)
        {
                recv_buf[usart_rx_pos++]= recByte;
        }              
    }
}

void UART_IDLECallBack(UART_HandleTypeDef*huart)
{
   int result;
   /* 判斷是哪個串口觸發的中斷 */
   if(huart - >Instance == USART3)
     {
         __HAL_UART_CLEAR_IDLEFLAG(&huart3);
         recv_buf[usart_rx_pos]= '?';
         result= rt_mq_send(mq, &recv_buf, sizeof(recv_buf));
         if(result != RT_EOK)
         {
                  rt_kprintf("rt_mq_sendERRn");
         }
         usart_rx_pos= 0;
    }

}


/**
  *@brief This function handles USART1 global interrupt.
  */
void USART3_IRQHandler(void)
{
  /*USER CODE BEGIN USART1_IRQn 0 */
     if(__HAL_UART_GET_FLAG(&huart3,UART_FLAG_RXNE)!= RESET)
     {
               HAL_UART_RxCallback(&huart3);
     }
     if(__HAL_UART_GET_FLAG(&huart3,UART_FLAG_IDLE) != RESET)
     {
               UART_IDLECallBack(&huart3);
     }

  /*USER CODE END USART1_IRQn 0 */
 HAL_UART_IRQHandler(&huart3);
}

四、下載驗證

使用串口助手發送一個字符串到MCU,MCU將收到的內容返回到串口助手,完成一次數據收發流程。

圖片

五、小知識點

1.串口空閑中斷產生條件

當接收數據后出現一個byte的高電平(空閑)狀態,就會觸發空閑中斷。并不是空閑就會一直中斷,準確的說應該是上升沿(停止位)后一個byte,如果一直是低電平是不會觸發空閑中斷的(會觸發break中斷)。經常在接收不定長的數據時與DMA配合使用。
2.中斷清除方式

STM32固件庫,USART_ClearITPendingBit( USARTx, USART_IT_IDLE )是不能清除中斷的,需要再讀取USARTx->DR寄存器的值才能清除。

HAL庫,使用__HAL_UART_CLEAR_IDLEFLAG(&huartx)即可清除中斷。

好啦,關于RTT串口的使用就講解到這里,大家有什么不懂的地方可后臺留言。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 中斷
    +關注

    關注

    5

    文章

    900

    瀏覽量

    41746
  • 串口
    +關注

    關注

    14

    文章

    1557

    瀏覽量

    77035
  • RT-Thread
    +關注

    關注

    31

    文章

    1305

    瀏覽量

    40383
  • stm32cubemx
    +關注

    關注

    5

    文章

    284

    瀏覽量

    15001
  • 消息隊列
    +關注

    關注

    0

    文章

    33

    瀏覽量

    3017
收藏 人收藏

    評論

    相關推薦

    RT-Thread最新推出Nano極簡版

    RT-Thread適時推出第一個RT-Thread Nano極簡版,適用于家電、消費電子、醫療設備、工控等領域大量使用的32位ARM入門級MCU的場合,支持多任務處理、信號量和郵箱等相
    發表于 07-31 11:35 ?5403次閱讀

    從安裝到使用,RT-Thread Nano最全教程看完不信你還不會使用

    RT-Thread Nano發布以來,小編收到不少開發者詢問RT-Thread Nano的配套教程實例,幸得RT-Thread開發者燕十三
    的頭像 發表于 09-26 06:39 ?5.9w次閱讀
    從安裝到使用,<b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>最全教程看完不信你還不會使用

    i.MX RT1170:VGLite移植RT-Thread Nano過程講解(下)

    上篇介紹了如何移植 RT-Thread Nano 內核與 Finsh 控制臺到 RT1170。本篇繼續介紹如何將 NXP 官方的 VGLite API 移植到 RT-Thread
    的頭像 發表于 11-09 11:22 ?996次閱讀

    RT-Thread Nano入門:獨立看門狗(IWDT)

    本文主要介紹怎么用RT-Thread Nano實現獨立看門狗IWDT驅動,創建一個喂狗線程,實現定時喂狗功能。
    的頭像 發表于 11-22 11:04 ?2487次閱讀
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b><b class='flag-5'>入門</b>:獨立看門狗(IWDT)

    【已結束】【每日一練】RT-Thread Nano入門全套教程,名師帶路,不走彎路

    )打卡第九天:【每日一練】RT-Thread Nano-串口接收(信號量使用)編寫1(第九節學習視頻)打卡第十天:【每日一練】RT-Thread
    發表于 05-17 10:27

    RT-Thread Studio 上使用 RT-Thread Nano

    _hw_console_output() ,默認可以進行打印。打開串口終端,可以發現在終端中執行了打印。基于 Nano 添加 FinSH雙擊 RT-Thread Settings 進入配置,打開組件,勾選 FinSH Shell
    發表于 05-18 15:59

    【每日一練】RT-Thread Nano-外部中斷(消息隊列使用)1(第十一節學習視頻)

    及MSH-EXPORT-1(第七節學習視頻)【每日一練】RT-Thread Nano-自動初始化及MSH-EXPORT-2(第八節學習視頻)【每日一練】RT-Thread Nano-
    發表于 05-27 09:53

    【每日一練】RT-Thread Nano-外部中斷(消息隊列使用)2(第十二節學習視頻)

    )【每日一練】RT-Thread Nano-串口接收(信號量使用)編寫1(第九節學習視頻) 【每日一練】RT-Thread
    發表于 05-28 09:57

    【每日一練】RT-Thread Nano-動態創建線程代碼修整(第十三節學習視頻)

    及MSH-EXPORT-2(第八節學習視頻)【每日一練】RT-Thread Nano-串口接收(信號量使用)編寫1(第九節學習視頻) 【每日一練】R
    發表于 05-29 08:00

    【每日一練】RT-Thread Nano-通用定時器(按鍵消抖)-消息隊列(第十四節學習視頻)

    (第九節學習視頻) 【每日一練】RT-Thread Nano-串口接收(信號量使用)調試2(第十節學習視頻)【每日一練】RT-Thread
    發表于 05-30 08:00

    RT-Thread Nano的相關資料下載

    RT-Thread Nano入門學習筆記作者:Linkk更新時間:2021.02.17學習過程中使用的芯片:stm32f103c8t6庫函數:標準庫資料獲取RT-Thread官網:ht
    發表于 12-09 06:59

    RT-Thread Nano入門學習筆記

    RT-Thread Nano入門學習筆記
    發表于 11-26 12:36 ?20次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b><b class='flag-5'>入門</b>學習筆記

    基于 Keil MDK 移植 RT-Thread Nano

    本文介紹如何基于 Keil MDK 移植 RT-Thread Nano ,并以一個 stm32f103 的基礎工程作為示例進行講解。 RT-Thread Nano 已集成在 Keil
    發表于 01-26 17:04 ?16次下載
    基于 Keil MDK 移植 <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>

    如何創建RT-Thread Nano工程

    本文將嘗試使用國產的嵌入式實時操作系統RT-Thread,相比較于FreeRTOS,RT-Thread還是有很多有點的,比如有Fish命令行界面,國產開源免費,Nano版本代碼量極小,移植起來非常
    的頭像 發表于 03-19 12:13 ?3886次閱讀

    玩轉RT-Thread之消息隊列的應用

    在嵌入式系統開發中,實時處理串口和ADC數據是一項重要的任務。本文將介紹如何在RT-Thread實時操作系統中,利用消息隊列來同時處理來自串口和ADC的數據。通過這種方法,我們能夠高效
    的頭像 發表于 07-23 08:11 ?661次閱讀
    玩轉<b class='flag-5'>RT-Thread</b>之消息<b class='flag-5'>隊列</b>的應用
    澳门百家乐海星王娱乐城| 百家乐送彩金网络| 丹东市| 上海百家乐的玩法技巧和规则| 金百亿百家乐官网娱乐城| 大发888真钱电玩游戏| 网络百家乐必胜投注方法| 亚洲百家乐官网博彩的玩法技巧和规则| tt娱乐城怎么样| 大发888下载网站| 百家乐赌博机假在哪里| 新天地百家乐官网的玩法技巧和规则 | 百家乐官网免费改单| 新葡京娱乐场| sz全讯网新2xb112| 新澳博百家乐娱乐城| 百家乐怎样算大小| 百家乐怎样发牌| 木棉百家乐官网的玩法技巧和规则 | 红树林百家乐的玩法技巧和规则| 八运24山风水坟地图解| 网上百家乐官网骗人的吗| 云顶国际网| 百家乐真钱送彩金| 百家乐官网园能贷款吗| 真人百家乐官网国际第一品牌| 百家乐官网怎样发牌| 圣淘沙娱乐城真人赌博| 济州岛娱乐场cns| 冠通网络棋牌世界| 大发888娱乐城 34hytrgwsdfpv| 娱乐百家乐下载| 摩纳哥百家乐的玩法技巧和规则| 百家乐是如何骗人的| 长城百家乐游戏| 百家乐官网筹码皇冠| 博天堂百家乐官网的玩法技巧和规则| 横峰县| 百家乐官网游戏机在哪有| 娱乐城百家乐官网可以代理吗| 百家乐官网注册赠分|