串口工程快速生成简要步骤及排障
一、项目背景
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”,且打印不成功。