在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

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

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

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

一、準備工作

1.硬件準備:

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

ST-LINK

USB轉(zhuǎn)TTL模塊

2.軟件準備:

KEIL5 MDK

STM32CubeMX

二、使用STM32CubeMX生成MDK工程

使用STM32CubeMX創(chuàng)建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初始化函數(shù)使用自動初始化的宏添加到RTT中進行初始化,當然你也可以直接在main.c調(diào)用初始化,看個人習慣。

image.png

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

image.png

3.USART線程

從消息隊列中將接收到的數(shù)據(jù)發(fā)送到上位機。

image.png

4.USART中斷服務函數(shù)

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

void HAL_UART_RxCallback(UART_HandleTypeDef*huart)
{
   /* 判斷是哪個串口觸發(fā)的中斷 */
   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;
   /* 判斷是哪個串口觸發(fā)的中斷 */
   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);
}

四、下載驗證

使用串口助手發(fā)送一個字符串到MCU,MCU將收到的內(nèi)容返回到串口助手,完成一次數(shù)據(jù)收發(fā)流程。

圖片

五、小知識點

1.串口空閑中斷產(chǎn)生條件

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

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

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

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

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

    關注

    5

    文章

    904

    瀏覽量

    42528
  • 串口
    +關注

    關注

    14

    文章

    1586

    瀏覽量

    78689
  • RT-Thread
    +關注

    關注

    32

    文章

    1371

    瀏覽量

    41530
  • stm32cubemx
    +關注

    關注

    5

    文章

    286

    瀏覽量

    15983
  • 消息隊列
    +關注

    關注

    0

    文章

    33

    瀏覽量

    3085
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    RT-Thread最新推出Nano極簡版

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

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

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

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

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

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

    本文主要介紹怎么用RT-Thread Nano實現(xiàn)獨立看門狗IWDT驅(qū)動,創(chuàng)建一個喂狗線程,實現(xiàn)定時喂狗功能。
    的頭像 發(fā)表于 11-22 11:04 ?3112次閱讀
    <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(第九節(jié)學習視頻)打卡第十天:【每日一練】RT-Thread
    發(fā)表于 05-17 10:27

    RT-Thread Studio 上使用 RT-Thread Nano

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

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

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

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

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

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

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

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

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

    RT-Thread Nano的相關資料下載

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

    RT-Thread Nano入門學習筆記

    RT-Thread Nano入門學習筆記
    發(fā)表于 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
    發(fā)表于 01-26 17:04 ?17次下載
    基于 Keil MDK 移植 <b class='flag-5'>RT-Thread</b> <b class='flag-5'>Nano</b>

    如何創(chuàng)建RT-Thread Nano工程

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

    玩轉(zhuǎn)RT-Thread之消息隊列的應用

    在嵌入式系統(tǒng)開發(fā)中,實時處理串口和ADC數(shù)據(jù)是一項重要的任務。本文將介紹如何在RT-Thread實時操作系統(tǒng)中,利用消息隊列來同時處理來自串口和ADC的數(shù)據(jù)。通過這種方法,我們能夠高效
    的頭像 發(fā)表于 07-23 08:11 ?854次閱讀
    玩轉(zhuǎn)<b class='flag-5'>RT-Thread</b>之消息<b class='flag-5'>隊列</b>的應用
    主站蜘蛛池模板: 色网站免费视频 | 男女视频在线看 | 在线观看一二三区 | 欧美黄色片在线 | 国产精品久久女同磨豆腐 | 国产精品福利一区 | 一 级 黄 色 片生活片 | 国产成人三级视频在线观看播放 | 特黄十八岁大片 | 中国性猛交xxxxx免费看 | 中文字幕第13亚洲另类 | 青青热久久国产久精品秒播 | 好大好硬好深好爽视频h | 综合久| 黄a视频在线观看 | 在线精品国产成人综合第一页 | 色视频观看 | 久久女同 | 国产香港日本三级在线观看 | 欧美日韩一卡2卡三卡4卡新区 | 日本最新免费网站 | 国产香港日本三级在线观看 | 国产一卡二卡3卡4卡四卡在线 | 狠狠色丁香九九婷婷综合五月 | аⅴ天堂 在线 | 黄色网址你懂的 | 午夜视频在线观看免费高清 | 成人在线观看网站 | 日本在线亚洲 | 国产精品美女在线 | 色媚网| 天天干天天操天天摸 | 久久精品2020| 国产18到20岁美女毛片 | 成人在色线视频在线观看免费大全 | 男女交性永久免费视频播放 | 亚洲国产一区二区三区a毛片 | 亚洲444444在线观看 | 中国又粗又大又爽的毛片 | 婷婷 色天使 | 男人天堂网在线播放 |