一、引言
在前兩篇文章里面,講述了如何利用keil RTE創建閃燈程式和如何利用CubeMX實作串口通信,本篇文章主要講解RTE、RTX5和CubeMX的結合問題,
Keil RTE 閃燈程式: https://blog.csdn.net/zzlwl/article/details/115394066
keil RTE HAL庫 STM32CubeMX 串口收發: https://blog.csdn.net/zzlwl/article/details/115431728
二、主要思路和流程
(1)使用CubeMX創建串口初始化代碼
采用CubeMX的原因主要是該工具生成的代碼完全是基于hal庫的,可以較好的和keil 的RTE工具對接,代碼生成完后專案保留備用,后面要粘貼到keil RTE創建的專案內,
(2)創建基于RTOS2 的keil RTX5專案,
主要選擇如下(其他的讓系統自動選擇依賴):

(3)創建RTOS2的main檔案和中斷處理檔案
利用模板創建main檔案和中斷處理檔案的程序請查看前面文章,
(4)更改相關設定
(4.1)加入宏定義HSE_VALUE=8000000和C99模式選擇

(4.2)配置串口相關的IO口

(4.3)確認下系統節拍頻率

(5)更改main檔案:
#include "hal_init.h" //需要宣告的在CubeMx創建的初始化函式
extern UART_HandleTypeDef huart1;//串口
/*----------------------------------------------------------------------------
* Application main thread
*---------------------------------------------------------------------------*/
void app_main (void *argument) {
// ...
for (;;) {//自己添加的測驗代碼
HAL_GPIO_TogglePin(GPIOG,GPIO_PIN_3);
osDelay(1000);
HAL_UART_Transmit(&huart1,"hello haha jin tian hao\r\n",sizeof("hello haha jin tian hao\r\n")-1,20);
}
}
int main (void) {
// System Initialization
//HAL_Init();
LED_Initialize();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
/* Initialize interrupts */
MX_NVIC_Init();
// ...
HAL_UART_Transmit(&huart1,"start--------------\r\n",sizeof("start--------------\r\n")-1,5);
//上面為CubeMx創建的初始化代碼
osKernelInitialize(); // Initialize CMSIS-RTOS
osThreadNew(app_main, NULL, NULL); // Create application main thread
osKernelStart(); // Start thread execution
for (;;) {}
}
在主程式中osKernelInitialize上面的代碼均為CubeMx創建,其中HAL_Init主要任務是systick的初始化和中斷設定,此任務已經由作業系統接管,其中斷處理函式也被多載,故得到系統當前節拍值的函式需要重新實作,具體如下:
uint32_t HAL_GetTick(void)
{
return osKernelGetTickCount();
}
如顯示編譯出錯,則應引入相應的包含檔案(#include "cmsis_os2.h")
hal_init.h和 hal_init.c檔案為main呼叫函式的實作和宣告代碼,其來自CubeMX系統初始化部分,直接復制粘貼即可,不再累述,
系統運行結果如下:

由于設定的波特率為9600bps,每個字符的時間為1ms,故初始化顯示了6個字符;小燈每過1s狀態改變1次,每次串口顯示20多個字符,由于已經超時,故不能進行回車換行,
三、結論
為方便對比,我把手頭的正點原子的stm32 ucos2.91的代碼和這里的代碼分別重新編譯了一遍,結果如下:(左RTX5 右ucos )

從該結果可以看出,rtx5程式占據22k空間,查看代碼可以看出,RTX5沒有條件編譯控制,故代碼量遠遠多于ucos,由于RTX的依賴庫也特別多,故編譯速度也遠遠落后于正點原子提供的模板,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/273796.html
標籤:其他
下一篇:數字電路與計算機組成原理的交叉
