哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

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

STM32L051上使用RT-Th (二、CubeMX配置)

矜辰所致 ? 來源:矜辰所致 ? 作者:矜辰所致 ? 2022-06-26 14:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

得吐槽一下這個標題字數(shù),我都寫不全了
應用篇-在STM32L051上使用RT-Thread 第二篇,使用STM32CubeMX 進行對應外設配置,同時做一些簡單測試。

目錄

  • 前言
  • 一、使用 STM32CubeMX 配置
  • 1.1 基礎步驟
  • 1.2 修改配置
  • 1.3 踩坑記錄
  • 二、初始簡單測試
  • 2.1 基本設計思路
  • 2.2 外設簡單測試
  • 三、時刻關注占RAM大小
  • 結(jié)語

前言

上篇文章我們僅僅是開了個頭,使用 RT-Thread Studio 新建了一個基于 STM32L051 的 RT-Thread Nano 工程,本文我們就在在這個工程的基礎上使用 STM32CubeMX 做STM32的基本配置。

??
本 RT-Thread 專欄記錄的開發(fā)環(huán)境:
RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發(fā)環(huán)境 及 配合CubeMX開發(fā)快速上手)
RT-Thread記錄(二、RT-Thread內(nèi)核啟動流程 — 啟動文件和源碼分析)
??
RT-Thread 內(nèi)核篇系列博文鏈接:
RT-Thread記錄(三、RT-Thread 線程操作函數(shù)及線程管理與FreeRTOS的比較)
RT-Thread記錄(四、RT-Thread 時鐘節(jié)拍和軟件定時器
RT-Thread記錄(五、RT-Thread 臨界區(qū)保護)
RT-Thread記錄(六、IPC機制之信號量、互斥量和事件集)
RT-Thread記錄(七、IPC機制之郵箱、消息隊列)
RT-Thread記錄(八、理解 RT-Thread 內(nèi)存管理)
RT-Thread記錄(九、RT-Thread 中斷處理與階段小結(jié))
??
在STM32L051C8 上使用 RT-Thread 應用篇系列博文連接:
RT-Thread 應用篇 — 在STM32L051上使用 RT-Thread (一、無線溫濕度傳感器 之 新建項目)

一、使用 STM32CubeMX 配置

STM32CubeMX 配合 RT-Thread Studio 使用的方法在我的博文:《RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發(fā)環(huán)境 及 配合CubeMX開發(fā)快速上手)》

的第三小節(jié)有說明:

pYYBAGK39meANS85AAAt6SiABAg236.png

配置我們需要根據(jù)原理圖進行,本應用所用到的外設原理圖如下(無線通訊模塊沒有放進來,使用的是串口TXD3和RXD3,另外使用的外部8Mhz):

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

1.1 基礎步驟

點擊 CubeMX Setting,然后選擇芯片類型,點擊OK即可打開STM32CubeMX,如下圖:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

進入CubeMX 后設置步驟就很基礎了。

我們按照 時鐘,調(diào)試接口,串口,GPIO,定時器,工程選項 依次配置,下面就簡單列一下步驟:

時鐘:

RCC選項,外部高速時鐘 選擇使用外部晶振:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

選擇完時鐘就可以在 Clock Configuration 中配置系統(tǒng)時鐘,直接把系統(tǒng)時鐘改成最大的 32Mhz,點擊確定,系統(tǒng)會自動修改好時鐘樹:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

調(diào)試接口:

SYS選項,在 Debug Serial Wire 前打勾,表示使用SWD接口:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_19,color_FFFFFF,t_70,g_se,x_16

串口:

串口一已經(jīng)用作了打印串口,在工程 drivers 文件夾里的drv_usart.c 文件中已經(jīng)使用INIT_BOARD_EXPORT(rt_hw_usart_init); 初始化了,所以我們這里不需要使能。

我們直接設置一下我們需要和無線通訊模塊 通信的 串口,原理圖上是串口3,在L051上是LPUART1(STM32F103C8 和 STM32L051C8是 pin to pin 的):

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

GPIO:

普通GPIO設置,2個按鍵輸入,一個LED輸出,2個IO口做軟件I2C

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_19,color_FFFFFF,t_70,g_se,x_16

定時器:

我們設置兩個硬件定時器,一個1S,一個1ms,我們可以根據(jù)自己使用不使用選擇初始化。

設置為1S的定時器 TIM2:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

設置為1ms的定時器 TIM21:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

工程選項:

最后在 Project Manager 中做最后的配置,生成工程:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

完成上述步驟,點擊CubeMX右上角 GENERATE CODE 生成工程。
根據(jù)我以前的博文說明,生成好了以后,不要打開,直接關閉CubeMX即可,然后回到 RT-Thread Studio,出現(xiàn)下面的彈框點擊確定即可。

pYYBAGK39myAdbFcAAAql5lL6pE638.png

完成以后多了cubemx 文件夾,然后編譯一下,正常結(jié)果如下(其實我自己走流程的時候,出過一次問題,后面小節(jié)會說明):

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

1.2 修改配置

還是根據(jù)《RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發(fā)環(huán)境 及 配合CubeMX開發(fā)快速上手)》中的記錄,修改一下SConscript文件,使得包含我們 CubeMX 生成的 GPIO 、串口和定時器設置:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

修改完成以后不要忘了同步 scons 配置!!再重新構(gòu)建!

這里要特別說明一下stm32f1xx_it.c 這個文件:

在《RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發(fā)環(huán)境 及 配合CubeMX開發(fā)快速上手)》中我建議不需要添加,因為里面有些中斷響應函數(shù), RT-Thread 內(nèi)核有自己的實現(xiàn)方式。但是這里我還是添加了, 但是要把stm32f1xx_it.c 文件中 一些中斷響應函數(shù)的給注銷了,因為在RT-Thread 內(nèi)核有其他地方有實現(xiàn)!

我的做法是,除了下圖自己后面程序設計需要使用到的,其他的都給刪除了,注意這里方便說明用的是函數(shù)聲明部分,需要在stm32f1xx_it.c 文件中函數(shù)實現(xiàn)部分刪除:

poYBAGK39m2AV0a5AABWVCerPdU062.png

配置完成以后再次進行編譯,結(jié)果如下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

完成上面配置后我們就可以開始設計我們的程序了。

1.3 踩坑記錄

按照上面 1.1 小節(jié)的基礎步驟設置 ,完成以后,在CubeMX最后一步生成工程的時候居然卡死了,我只能強制退出CubeMX任務,重新點擊CubMX Settings 打開CubeMX進行配置。

完成以后發(fā)現(xiàn)左邊CubeMX里面的文件列表不是和當時我文章記錄的一樣:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

居然沒有SConscript,編譯報錯了,即便我重新復制進去,也沒有用……

一般來說,如果編譯除了問題,我們應該從編譯結(jié)果去查找問題,然后分析解決,但是對于這種軟件聯(lián)動的自動化配置,我還是建議重新操作嘗試解決。所以我把工程全部刪除,然后重新來一遍看看。

因為考慮到CubeMX卡死過一次,項目出問題了,兩個軟件沒有成功的關聯(lián),所以我是重新操作了一次正常了。

而且有一個系列操作,在我們點擊 RT-Thread Studio 打開CubeMX以后,最好是等待 RT-Thread Studio 的一個彈框消失以后再進行操作:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

二、初始簡單測試

完成上面的配置,我們的基本框架就已經(jīng)搭建好了,剩下的就是實現(xiàn)應用程序了,那么在實際的操作之前,我們先簡單驗證一下整體的框架沒有問題,簡單測試下LED和按鍵,串口的話要單獨一篇文章分析。

2.1 基本設計思路

首先我們得在 main.c 文件中包含必備頭文件,和在main線程中做基本的初始化:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

其實這個步驟就和裸機一樣,我們完全可以把 main 當成裸機中的main函數(shù),所有的程序在main中實現(xiàn),也是可以。 這種方式就類似于 ESP32-C3 使用ESP-IDF 開發(fā)環(huán)境中,大部分操作都在 app_main 任務中實現(xiàn), app_main 也不過是 FreeRTOS 啟動時候創(chuàng)建的一個任務。


記得在上一篇博文中我們提到過 一個main 線程就占用了 2K,這個2K不能浪費,要么我們在main里面多做一些工作,要么就是到時候把main線程的大小改小。

我們一個單品溫濕度傳感器,有幾個主要的工作:

  1. I2C 數(shù)據(jù)采集,這個部分需要移植一下代碼,然后采集實現(xiàn)部分需要用一個線程來實現(xiàn),計劃是定時器到了一定的計數(shù)之后,發(fā)送一個信號量使得線程喚醒采集一次;
  2. 無線模塊串口通訊,這個部分是和上一步聯(lián)動的,定時器到了定時時間,通知傳感器采集數(shù)據(jù),然后把數(shù)據(jù)放置無線通訊協(xié)議中發(fā)送出出去,這個部分還得用一個線程實現(xiàn),串口的通訊;
  3. LED燈,其實可有可無,但是作為我們第一個基礎應用,還是加上也沒關系,LED的切換,到時候可以隨意加在哪里,比如采集到了數(shù)據(jù)成功發(fā)送以后,LED燈閃爍一次;
  4. 按鍵,按鍵其實也可有可無,但是還是因為我們的第一個基礎應用,我想把我常用的按鍵驅(qū)動移植過來試一試,根據(jù)以往經(jīng)驗,按鍵驅(qū)動也需要一個線程,而且這個線程至少需要512字節(jié)的空間;
  5. 定時器,根據(jù)產(chǎn)品所需要的的定時時間釋放信號量,使得數(shù)據(jù)采集線程開始工作,定時器是硬件定時器,使用中斷實現(xiàn)不用額外線程;

這里思路暫時先這樣,后期如果使用過程中有新的改動,再來更新。

2.2 外設簡單測試

然后我們把一些外設需要的宏定義設置一下:

pYYBAGK39m-AGBVfAABIJXmHwKA241.png

LED:

然后在主函數(shù)中寫一個LED燈切換的邏輯(此部分太簡單了,所以截個圖看看就行了):

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_13,color_FFFFFF,t_70,g_se,x_16

按鍵:

然后新建一個線程,給到時候按鍵驅(qū)動移植使用,這里就用簡單的按鍵處理方式,大小設定為512字節(jié)。

值得注意的是,我們新建任務只能用靜態(tài)初始化的方式,因為我們沒有定義使用heap,新建的線程大小直接影響RAM空間大小。

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_17,color_FFFFFF,t_70,g_se,x_16

定時器:

我們有一個1S的定時,我們也來簡單測試一下,具體的測試方式和我們在記錄九中的一致:
《RT-Thread記錄(九、RT-Thread 中斷處理與階段小結(jié))》

但是這次我們加了stm32f1xx_it.c 文件,所以我們這次直接在stm32f1xx_it.c 文件中修改(再次說明,實際使用中中斷響應函數(shù)中不要添加打印操作,這里只是測試測試?。。。?/strong>

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_17,color_FFFFFF,t_70,g_se,x_16

所有改完以后編譯一下:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

OK!編譯沒問題,下載查看測試結(jié)果:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_18,color_FFFFFF,t_70,g_se,x_16

三、時刻關注占RAM大小

在小內(nèi)存芯片上使用操作系統(tǒng),程序運行占用的RAM大小我們不容忽略,我們在應用中務必學會觀察內(nèi)存占用情況:

完成CubeMX基礎步驟以后,默認只添加了兩個.c文件,與初始工程的比較:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_1,color_FFFFFF,t_70,g_se,x_16

修改完配置,表示著我們的基礎框架基本搭建好了,我們多添加了GPIO、串口,和定時器的驅(qū)動程序:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_1,color_FFFFFF,t_70,g_se,x_16

說明!上面幾張圖因為剛開始,所以貼了和初始工程的比較,往后的比較我不可能從初始工程開始貼圖,只能與上一次工程完善的結(jié)果做比較:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA55-c6L6w5omA6Ie0,size_20,color_FFFFFF,t_70,g_se,x_16

本文的簡單測試,程序運行時候需要占用 RAM的大小: 1536+5184= 6720 字節(jié),我們的芯片 RAM:8192字節(jié)。

結(jié)語

本文依然還處于工程配置階段,再次手把手做了次教學,如何使用 STM32CubeMX 配合 RT-Thread Studio開發(fā)。

我們詳細的說明了配置步驟,同時在初始測試小節(jié)寫好了本應用的的設計思路。做了基本框架設計 和 初步的測試說明。

現(xiàn)在看來,這系列應用篇還真算得上保姆級的教程了 = =!我自己現(xiàn)在都覺得真的細……

下一篇的內(nèi)容應該是把 I2C 讀寫的程序移植過來,到時候看看篇幅,如果又有很多細節(jié)那就這一個內(nèi)容,如果內(nèi)容篇幅簡單到時候看情況添加。

好了,本文就到這,謝謝大家!

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

    關注

    2313

    文章

    11195

    瀏覽量

    374653
  • Studio
    +關注

    關注

    2

    文章

    227

    瀏覽量

    30794
  • RT-Thread
    +關注

    關注

    32

    文章

    1640

    瀏覽量

    45208
  • CubeMx
    +關注

    關注

    0

    文章

    33

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    在帶有 RT1060 IW612 的定制板開發(fā) Matter 恒溫器的問題求解

    你好 我正在使用 RT1060 IW612 (u-blox w276) 在定制板開發(fā) Matter 恒溫器。 Matter SDK:發(fā)布 / V1.4.0 MCU:RT1062CVL5B 閃存
    發(fā)表于 04-17 06:54

    STM32L051x6/8:超低功耗32位MCU的卓越之選

    STM32L051x6/8:超低功耗32位MCU的卓越之選 在當今的電子設計領域,低功耗、高性能的微控制器(MCU)需求日益增長。STMicroelectronics推出的STM32L051x6/8
    的頭像 發(fā)表于 03-18 16:40 ?756次閱讀

    請問RT-Thread與stm32cubemx聯(lián)合開發(fā)的原理是什么?

    在使用RT-Thread與stm32cubemx聯(lián)合開發(fā)的原理是什么,cubemx在其中主要起到了哪些功能呢?
    發(fā)表于 10-11 15:49

    CUBEMX配置不了,配置完立刻閃退掉,無法查看cubemx配置界面是為什么?

    在studio配置cubemx配置不了,配置完沒顯示cubemx的界面
    發(fā)表于 10-11 12:33

    rt-thread-v4.0.5 按示例配置FAL 或 SEGGER_RTT,在scons --target=mdk5出錯怎么解決?

    其一: 在 STM32L4 應用 littlefs 文件系統(tǒng) https://www.rt-thread.org/document/site/#/rt
    發(fā)表于 09-25 07:44

    RT Thread Studio新建STM32L431RCTx工程,串口無輸出怎么解決?

    又遇到這種鬼問題,采用RT Thread Studio新建了thread通用項目,內(nèi)核版本為5.0.2,芯片型號為STM32L431RCTx,芯片包為0.1.9,建好工程后,程序可以正常運行,寫的閃
    發(fā)表于 09-16 07:24

    STM32cubeMX生成配置rt-thread引用問題求解

    如題,本人小白,剛接觸rt-thread,STM32F1/4簡便配置起見利用cubeMX自動生成,測試幾次后直接蒙了,不知道哪些文件是rt-
    發(fā)表于 09-12 07:21

    意法半導體:STM32CubeMX將不再集成到STM32CubeIDE中

    從2025年11月發(fā)布的版本開始,我們將僅以 獨立 版本的形式提供 STM32CubeIDE 和 STM32CubeMX 。 STM32CubeMX將不再集成到STM32CubeIDE
    的頭像 發(fā)表于 09-01 17:18 ?3888次閱讀

    對于在STM32CubeMx使用FMC中的NAND FLASH里面配置這些時間有什么說明嗎?

    對于在STM32CubeMx使用FMC中的NAND FLASH里面配置這些時間有什么說明嗎?
    發(fā)表于 07-21 07:07

    STM32L433VCT6進入STOP模式2之后,功耗依然和正常運行模式?jīng)]有差別,為什么?

    STM32CubeMX配置power savinf mode 2、系統(tǒng)電源供電時LDO 結(jié)果: 1、運行是10mA,進入STOP模式時是9.9mA; 2、掛仿真,沒有任何喚醒的中斷產(chǎn)生,應該是進入STOP模式了。 請教壇子
    發(fā)表于 07-21 06:42

    讓開發(fā)板暢游網(wǎng)絡:RT-Thread CherryUSB 驅(qū)動 RNDIS 模塊詳解 | 技術(shù)集結(jié)

    通過4G模塊上網(wǎng)的功能,以STM32F429為例。目錄新建工程配置cubemx配置cherryusbmain.c添加代碼完成1新建工程2配置
    的頭像 發(fā)表于 07-02 17:04 ?3783次閱讀
    讓開發(fā)板暢游網(wǎng)絡:<b class='flag-5'>RT</b>-Thread CherryUSB 驅(qū)動 RNDIS 模塊詳解 | 技術(shù)集結(jié)

    使用CubeMX配置STM32H7R7L8的時候出現(xiàn)無配置問題,怎么解決?

    使用CubeMX配置STM32H7R7L8的時候出現(xiàn)無配置問題,但是根據(jù)正點原子提供的例程中的.ioc文件中又是可以正常配置的。
    發(fā)表于 06-23 07:40

    STM32L433VCT6 LCD復用引腳如何分配?

    背景:使用STM32L433VCT6驅(qū)動段碼屏,33個段,其中用到一個PC10引腳,使用STM32CubeMX配置,只配置了LCD復用功能,但是用于LCD_SEG40還是LCD_SEG
    發(fā)表于 06-20 08:26

    STM32CubeMX配置STM32G070RBT6TR時為什么無法使能PVD中斷?

    STM32CubeMX 配置STM32G070RBT6TR時無法使能PVD中斷
    發(fā)表于 06-18 07:59

    STM32CubeMX配置STM32G070RBT6TR時無法使能PVD中斷怎么辦?

    STM32CubeMX 配置STM32G070RBT6TR時無法使能PVD中斷
    發(fā)表于 06-16 06:32
    黄平县| 涟源市| 垣曲县| 东乌珠穆沁旗| 华池县| 礼泉县| 常德市| 增城市| 嘉祥县| 卢湾区| 黔南| 灵山县| 萝北县| 连南| 江北区| 余干县| 白沙| 郑州市| 航空| 惠来县| 襄汾县| 道孚县| 亳州市| 温宿县| 浦江县| 墨竹工卡县| 郓城县| 宁陕县| 铜山县| 柳江县| 霸州市| 苍山县| 呈贡县| 锡林浩特市| 河源市| 墨玉县| 仪征市| 岳阳市| 尼玛县| 泊头市| 宜兴市|