【基于STM32CubeMX的freertos工程快速生成】串口篇-串口工程快速生成简要步骤及排障

串口工程快速生成简要步骤及排障

一、项目背景

1、项目出发点
(1)STM32 CUBE MX 软件的选用:
对于毕业以后很久没有碰过STM32代码编写的码农来说,如果按照传统的HAL库编写单片机程序费时费力。哪怕是仅仅用裸机跑功能,不仅仅需要重新阅读数据手册和开发板厂家的教程,而且还基于厂家例程改写引脚、外设参数等等。出于项目周期、任务达成两方面考量,为快速完成可供芯片功能、性能测试用途的STM32 demo工程代码,可考虑使用STM32 CUBE MX 软件进行快速代码生成,配合开发板相关手册、网上教程进行排障。(STM32CUBE MX官方下载地址
(2)RTOS的应用
基于项目多任务实时处理的需求,在项目中添加FREE_RTOS操作系统。借助STM32 CUBE MX 软件和操作系统配套官方配件包(配件包官方下载地址)进行快速移植、配置。
一方面,做项目没有足够时间系统性重拾以前的内容;另一方面,之前学生时代简单上手STM32工程进行实验,没有深究其中的众多机制(书到用时方恨少啊…),所以写下排障的记录,也供有类似需求的开发者参考,抛砖引玉,如有误请大佬指正。
如果读者参考本文的操作遇到其他问题或者对文中的操作有疑问和建议欢迎在评论区与我交流。
文中所用的软件大多通过ST官网或者野火/正点原子等开发板厂家可以获得,我尽量将软件贴在文章中免费下载,如有需要的读者可以联系我免费获取(编者自己也是厌倦了各种会员和关注微信下载的套路,故所有资源无门槛无套路联系我即可获得,愿与各位一起进步!)

2、工程的目标:使用STM32CUMX快速配置使用freertos的F103芯片工程,结合点灯代码验证在片上同时执行多任务的效果以及与上位机的交互功能。

二、项目环境

1、硬件环境

STM32F103开发板,使用debugger和串口线连接PC

2、软件环境

STM32 CUBE MX、keil、野火上位机

3、创建带有串口打印功能的freertos工程

3.1主要步骤:
1、安装CUBE MX 和keil,并安装对应的芯片包、freertos支持包
2、在CUBE 中选择芯片型号
3、进入可视化配置界面进行如下操作:
(1)使能freertos
在这里插入图片描述
(2)打开串口调试,改变系统时钟为基础的TIM6定时器(功能较少,不影响其他功能开发,具体可参考数据手册)
在这里插入图片描述
在这里插入图片描述

(3)打开外部晶振
在这里插入图片描述

(4)串口1使用默认配置即可
在这里插入图片描述
(5)配置并检视时钟树
在这里插入图片描述
(6)工程配置
在这里插入图片描述
(7)打开生成后的工程,在uart.c中进行printf重定向方便调试,记得加上头文件stdio.h(可选操作)

int fputc(int ch,FILE *f)
{
	HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
	return ch;
}

int fgetc(FILE *f)
{
	int ch;
	HAL_UART_Receive(&huart1, (uint8_t *)&ch, 1, 1000);
	return (ch);
}

(8)测试代码,向上位机发送hello world

void StartTask_USART(void const * argument)
{
  /* USER CODE BEGIN StartTask_USART */
  /* Infinite loop */
  for(;;)
  {
		printf("hello world\r\n");
    osDelay(2000);
  }
  /* USER CODE END StartTask_USART */
}

(9)工程配置中记得勾选Use MicroLIB,否则会报错“…\USER\chip_test.c(9): warning: #223-D: function “printf” declared implicitly”,且打印不成功。
在这里插入图片描述
在这里插入图片描述

### FreeRTOS入门教程及快速上手指南 #### 一、FreeRTOS基础概述 FreeRTOS是一款轻量级的实时操作系统(RTOS),专为嵌入式设备设计。它提供了丰富的功能模块,包括但不限于任务调度、信号量、队列以及计时器等[^2]。这些特性使得开发者能够高效地构建复杂的多任务应用。 #### 二、入门资料推荐 对于初学者而言,《FreeRTOS入门手册_中文.pdf》是一个非常有价值的参考资料。这份文档不仅涵盖了FreeRTOS的核心概念,还通过实例讲解了其具体用法和解决常见问题的方法[^1]。建议在学习之前具备一定的嵌入式基础知识,以便更好地理解和实践相关内容。 #### 三、环境搭建与配置流程 为了迅速掌握FreeRTOS的应用技巧,可以按照如下方式设置开发环境: 1. **选择目标硬件平台** - 确定所使用的微控制器型号及其支持情况。例如,在基于STM32系列芯片的情况下,可利用官方提供的工具链简化集成过程。 2. **安装必要的软件工具** - 下载并安装最新的IDE(如Keil MDK或IAR Embedded Workbench)用于编写代码。 - 获取对应厂商发布的HAL库或者LL驱动程序包来辅助外设控制操作。 3. **创建初始工程项目** - 利用图形化界面生成向导——比如STM32CubeMX——完成初步参数设定工作。 ```c // 示例:初始化串口通信接口函数声明部分 void MX_USART2_UART_Init(void); ``` 4. **引入FreeRTOS组件** - 将先前提到过的`FreeRTOS`核心源码目录复制粘贴至当前项目根路径下[^3]。 - 修改Makefile或其他类似的构建脚本文件以包含新增加的目标文件列表项。 5. **定义简单的测试场景** - 编写几个独立运行的任务单元作为起点探索点之一。 ```c static void vTaskFunction( void *pvParameters ) { const TickType_t xDelay = pdMS_TO_TICKS( 500 ); while ( true ) { /* Toggle LED state */ HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); /* Block task for 'xDelay' milliseconds */ vTaskDelay(xDelay); } } int main() { BaseType_t result; /* Create two identical tasks at different priorities levels */ result = xTaskCreate(vTaskFunction, "Blink", configMINIMAL_STACK_SIZE + 100, NULL, tskIDLE_PRIORITY + 1, &xHandle ); if(result != pdPASS){ Error_Handler(); } /* Start the scheduler to begin multitasking operation mode */ vTaskStartScheduler(); /* Should never reach here! */ return EXIT_FAILURE; } ``` #### 四、深入理解关键机制 除了熟悉基本框架之外,还需要重点关注以下几个方面才能进一步提升技能水平: - **优先级继承算法**防止死锁现象发生的同时保持公平性原则; - **互斥量与事件标志组**协调多个并发进程之间的同步需求; - **动态内存分配策略**平衡性能开销同灵活性之间关系; ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值