FreeRTOS第一篇从入门到放弃

本文介绍了作者在嵌入式设备中选用FreeRTOS作为操作系统的原因,并详细记录了从环境配置到实现FreeRTOS的第一个hello world任务及生成打印任务的过程。在配置环境中,作者遇到并解决了Keil5的版本问题,使用STM32CubeMX生成代码。在FreeRTOS实践中,通过LL库优化串口DMA,创建任务实现定时打印,最终成功实现了串口信息的周期性输出。
摘要由CSDN通过智能技术生成

啰嗦两句背景

由于公司里嵌入式设备功能复杂度逐渐增加,原有的裸机堆砌出的程序已经变成了一个无法修改的怪物,就像叠叠高(经典的桌面游戏,就是木条摞在一起,一根一根抽出来的游戏)走到了最后的阶段,谁也不敢对这堆处在微妙平衡中木条有任何的冒犯,只能说一句:对不起,打扰了…
遂起了重构的想法,经过一轮嵌入式系统的筛选,最后选定了FreeRTOS,因为它的商用上没有啥限制,而且又发现了STM32CubeMX这种傻瓜式的神器竟然能够直接生成代码,于是就愉快地开始了FreeRTOS的入坑之路。

环境配置

之前一直用的是Keil4,这里尝试了一下,发现CubeMX生成的代码好像无法读取,简单查了一下资料好像需要Keil5才能打开,果断直接升级。

安装keil5时遇到的小问题

基本和安装keil4的流程一样,只有一点需要注意一下,keil5的版本最好选择5.24之后的版本,否则使用最新的pack有可能会造成程序打开的时候报错

File       : H:\Keil_v5\ARM\PACK\Keil\STM32F0xx_DFP\2.0.0\Keil.STM32F0xx_DFP.pdsc 
Sequence   : CheckID 
Context    : Item #1: <control if="jep106id != 0x20">
                 Item #0: <block>::Line 2 
Expression : "              Message(2, "Not a genuine ST Device! Abort connection.");" 
----------------------------^ 
E203       : Undefined identifier - function 'Message'

具体解决方案在这:https://blog.csdn.net/u012849371/article/details/85195280

小福利:很多人的keil只激活到2020年,分享一个能到2032年的Keygen

使用STM32CubeMX生成模板

傻瓜式神器,哪里需要勾哪里,让我这个初级程序员感动的无以复加,妈妈再也不用担心我搭建新工程了。
大家还没有感受过的自行体会吧。
勾选FreeRTOS选项
勾选FreeRTOS选项

正式进入FreeRTOS

第一步 hello world!

按照惯例先打印个helloworld来试试。
【1】CubeMx中勾选USART1并添加发送DMA,使能中断;生成代码;

在这里插入图片描述在这里插入图片描述
有一点要注意的地方:再生成代码之前可以选择使用HAL或者LL库,这里选择的是LL库,原因是LL库更像之前的标准库,没有像HAL库一样把很多的实现和检查写入库函数中,整体的执行效率相对较高,对RAM/ROM的占用也比较小。
在这里插入图片描述
【2】打开工程,添加用户代码;

void MX_USART1_UART_Init(void)
{
   
  LL_USART_InitTypeDef USART_InitStruct = {
   0};
  LL_GPIO_InitTypeDef GPIO_InitStruct = {
   0};
  /* Peripheral clock enable */
  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1);  
  LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA);
  /**USART1 GPIO Configuration  
  PA9   ------> USART1_TX
  PA10   ------> USART1_RX 
  */
  GPIO_InitStruct.Pin = LL_GPIO_PIN_9;
  GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
  GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
  GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
  LL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  GPIO_InitStruct.Pin = LL_GPIO_PI
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值