STM32Cubemx:基于STM32F407ZGT6搭建FreeRTOS基础工程全过程

搭建环境说明:STM32Cubemx+STM32F407ZGT6(正点原子探索者V2,只要你的外部高速晶振和低速晶振一样就直接按我的步骤来,不一样也没事)

配置内容:

  • 时钟树
  • USART(printf)
  • FreeRTOS

如果本篇文章对你有帮助,记得点个赞哈!^^

一、STM32Cube配置工作

1.1 选芯片

在这里插入图片描述

1.2 配置外部晶振

在这里插入图片描述

1.3 配置Debug方式和时基源

在这里插入图片描述

1.4 配置串口

在这里插入图片描述

1.5 开启中间层(FreeRTOS)

在这里插入图片描述

1.6 尝试创建一个任务

在这里插入图片描述

1.7 配置时钟树

在这里插入图片描述

1.8 代码生成配置

在这里插入图片描述
在这里插入图片描述

1.9 点击GENERATE CODE

在这里插入图片描述

STM32Cube配置好了,接下来就开始在Keil中配置工程。

二、Keil5配置

2.1 开启Reset and Run,关闭Debug Description

做这一步的目的是要让我们每次烧写完程序后都自动运行,不然每次都要按复位代码才能运行。
不能直接点X退出,要点击OK退出,否则无法保存配置!!!!!!!!!

在这里插入图片描述
在这里插入图片描述

2.2 重定向printf()

我专门写了一篇有关printf()的博客,根据需要查看:STM32 HAL库:使用C标准库或MicroLIB实现printf && 多串口使用printf输出 && 结合DMA实现printf && 常见问题总结

2.2.1 修改usart.c文件

注意放在用户代码段,不然Cube会删除掉不再用户代码段的代码!!!!!

#include <stdio.h>
/* 告知连接器不从C库链接使用半主机的函数 */
#pragma import(__use_no_semihosting)

/* 定义 _sys_exit() 以避免使用半主机模式 */
void _sys_exit(int x)
{
    x = x;
}

/* 标准库需要的支持类型 */
struct __FILE
{
    int handle;
};

FILE __stdout;

/*  */
int fputc(int ch, FILE *stream)
{
    /* 堵塞判断串口是否发送完成 */
	/* 不同芯片的串口标志位不一定相同! */
    while((USART1->SR & 0X40) == 0);

    /* 串口发送完成,将该字符发送 */
    USART1->DR = (uint8_t) ch;

    return ch;
}

2.2.3 使用演示

在需要使用printf的c文件#include <stdio.h>

经测试,可以正常输出汉字、英文、整数、浮点数、字符、字符串
在这里插入图片描述

posted @ 2023-11-26 21:53  SuperCodeCat  阅读(489)  评论(0)    收藏  举报  来源