在前两篇文章里面,讲述了如何利用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
采用CubeMX的原因主要是该工具生成的代码完全是基于hal库的,可以较好的和keil 的RTE工具对接。代码生成完后项目保留备用,后面要粘贴到keil RTE创建的项目内。
主要选择如下(其他的让系统自动选择依赖):
利用模板创建main文件和中断处理文件的过程请查看前面文章。
(4.1)加入宏定义HSE_VALUE=8000000和C99模式选择
(4.2)配置串口相关的IO口
(4.3)确认下系统节拍频率
#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的依赖库也特别多,故编译速度也远远落后于正点原子提供的模板。
本文转载自微信公众号「程序员内点事」,作者程序员内点事 。转载本文请联系程序...
内部类 1.成员内部类 2.静态内部类 3.局部内部类 4.匿名内部类 ○内部类在一个类...
定义简单数组 有两种方法在asp中定义和初始化数组,让我们看看每种的例子: 方法...
manifest.json 复制代码 代码如下: { "name": "我的右键", "description": "chro...
小伙伴想精准查找自己想看的MySQL文章喏 → MySQL江湖路 | 专栏目录 ??我有一个...
本教程旨在帮助你驾驭Java正则表达式,同时也帮助我复习正则表达式。 什么是正则...
想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区 https://...
2021 年,人们比以前的任何时候都更有理由来爱上 Linux。在这个系列,我会分享 2...
一个打印机的Bug,微软已经解决了好几次,都没有搞定,这次呢? 在上周五暂停推...
Git 代码管理工具,类似 SVN 客户端。 安装步骤: 1、官网下载Git: https://git...