STM32CubeMx使用FreeRTOS搭建printf输出串口打印-----基于正点原子开发板阿波罗

news2024/11/15 16:02:57

文章目录

  • STM32CubeMx使用FreeRTOS搭建printf输出串口打印-----基于正点原子开发板阿波罗
      • 1.输入目标芯片
      • 2.选择RCC时钟
      • 3.配置调试模式
      • 4.USART的配置
      • 5.配置中断
      • 6.printf的重定向功能
      • 7.代码添加
      • 8.修改中断函数
      • 9.添加全局变量
      • 10.增加FreeRTOS支持
      • 11.在FreeRTOS中添加源码

STM32CubeMx使用FreeRTOS搭建printf输出串口打印-----基于正点原子开发板阿波罗

1.输入目标芯片

使用的开发板是正点原子的STM32F429IGT6开发板
在这里插入图片描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ABV5DpdV-1675233100755)(C:\Users\lan\AppData\Roaming\Typora\typora-user-images\image-20230201095021027.png)]

2.选择RCC时钟

在 STM32 中,一共有 5 个时钟源,分别是 HSI 、 HSE 、 LSI 、 LSE 、 PLL 。
①HSI 是高速内部时钟, RC 振荡器,频率为 8MHz ;
②HSE 是高速外部时钟,可接石英 / 陶瓷谐振器,或者接外部时钟源,频率范围是 4MHz – 16MHz ③LSI 是低速内部时钟, RC 振荡器,频率为 40KHz ;
④LSE 是低速外部时钟,接频率为 32.768KHz 的石英晶体;
⑤PLL 为锁相环倍频输出,严格的来说并不算一个独立的时钟源, PLL 的输入可以接 HSI/2 、 HSE 或者 HSE/2 。PLL倍频可选择为 2 – 16 倍,但是其输出频率最大不得超过 72MHz
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kvcMc5qX-1675233100757)(C:\Users\lan\AppData\Roaming\Typora\typora-user-images\image-20230201095211087.png)]
1.Crystal/Ceramic Resonator(晶振/陶瓷谐振器)表示的是选择 HSE(外部高速时钟)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ImdwZujU-1675233100757)(C:\Users\lan\AppData\Roaming\Typora\typora-user-images\image-20230201102028162.png)]
2.BYPASS Clock Source(旁路时钟源)就是由外部给定一个时钟信号,是单向的,猜测一般用于作为同步时钟
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4rriIgTz-1675233100758)(C:\Users\lan\AppData\Roaming\Typora\typora-user-images\image-20230201102102050.png)]
3.Disable(禁用)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-USpNPDg2-1675233100758)(C:\Users\lan\AppData\Roaming\Typora\typora-user-images\image-20230201102145562.png)]

3.配置调试模式

比较重要的一部:非常重要的一步,否则会造成第一次烧录程序后续无法识别调试器
配置JTAG模式
在这里插入图片描述
配置Serial Wire
在这里插入图片描述

4.USART的配置

在这里插入图片描述
Asynchronous (异步的),
Synchronous(同步的),
Single Wire (Half-Duplex)(单线(半双工)),
Multiprocessor Communication(多处理器通信),这里为我们配置的模式。
IrDA(红外通讯),介绍链接http://www.stmcu.org.cn/module/forum/thread-610633-1-1.html
LIN(LIN总线协议),介绍链接https://www.cnblogs.com/yangjiguang/p/6093240.html
SmartCard(智能卡),介绍链接https://baike.baidu.com/item/smart%20card

                                   学习链接https://blog.csdn.net/xqhrs232/article/details/80904616

SmartCard with Card Clock (带卡时钟的智能卡) 。
Hardware Flow Control (RS232) 选项中选择 Disable 或者 Enable (在这种模式中只有在Mode中选择Asynchronous方可选择)
参考:https://blog.csdn.net/qq_26575553/article/details/97249848

5.配置中断

在这里插入图片描述

6.printf的重定向功能

因为 Microlib 进行了高度优化以使代码变得很小。它的功能比缺省 C 库少,并且根本不具备某些 ISO C 特性。 某些库函数的运行速度也比较慢,想要使用printf(),必须开启
在这里插入图片描述

7.代码添加

在main函数添加

/* USER CODE BEGIN Includes */
#include <stdio.h>
/* USER CODE END Includes */

/* USER CODE BEGIN 4 */
int fputc(int ch, FILE *f)
{
    HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
    return ch;
}
 
/**
  * @brief getchar,scanf USARTx
  * @retval None
  */
int fgetc(FILE *f)
{
    uint8_t ch = 0;
    HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
    return ch;
}

/* USER CODE END 4 */

8.修改中断函数

stm32f4xx_it.c 中断服务函数文件,找到 USART1 中断的服务函数 USART1_IRQHandler()
中断服务函数里面就调用了串口中断处理函数 HAL_UART_IRQHandler()

/**
  * @brief This function handles USART1 global interrupt.
  */
void USART1_IRQHandler(void)
{
  /* USER CODE BEGIN USART1_IRQn 0 */

  /* USER CODE END USART1_IRQn 0 */
  HAL_UART_IRQHandler(&huart1);
  /* USER CODE BEGIN USART1_IRQn 1 */

  /* USER CODE END USART1_IRQn 1 */
}

然后再stm32f4xx_hal_uart.c 中找到 定时器中断处理函数原型 HAL_TIM_IRQHandler(),他的主要作用是判断是哪个串口产生中断,清除中断标识位,然后再去调用中断回调函数 HAL_UART_RxCpltCallback()
在这里插入图片描述
stm32f1xx_it.c 这个文件的最下面添加 HAL_UART_RxCpltCallback()的回调函数实现

/* USER CODE BEGIN 1 */
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart->Instance == USART1)
    {
        HAL_UART_Transmit(&huart1, (uint8_t *)Buffer, 1, 0xffff);
        HAL_UART_Receive_IT(&huart1, (uint8_t *)Buffer, 1);
    }
}
/* USER CODE END 1 */

9.添加全局变量

需要在 main.c 头部添加全局变量 Buffer

/* Private variables ---------------------------------------------------------*/
UART_HandleTypeDef huart1;

/* USER CODE BEGIN PV */
uint8_t Buffer[1];
/* USER CODE END PV */

需要在stm32f1xx_it.c 头部声明全局变量 Buffer

/* External variables --------------------------------------------------------*/
extern UART_HandleTypeDef huart1;

/* USER CODE BEGIN EV */
extern uint8_t Buffer[1];
/* USER CODE END EV */

在 main.c 中,while 循环前,串口初始化后,添加接收中断开启函数
在这里插入图片描述

10.增加FreeRTOS支持

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

11.在FreeRTOS中添加源码

在这里插入图片描述

参考:https://www.jianshu.com/p/4f01bfd91e67

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/190446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数学建模】数学建模中的常用工具推荐

前言 整理了几款我在建模比赛中需要准备的小工具&#xff0c;后续会随时不定期更新&#xff0c;以及完善内容&#xff0c;需要的小伙伴建议收藏一波~ [1] 公式编译器 Axmath&#xff08;建议购买正版&#xff09;mathtypeWord内置的公式编辑器 Axmath是国产的软件&#xff0…

pytorch安装(模式识别与图像处理课程实验)

pytorch安装&#xff08;模式识别与图像处理课程实验&#xff09;1、 打开cmd&#xff0c;创建torch虚拟环境。2、 激活创建的torch虚拟环境2.1、 进入pytorch官网&#xff0c;复制如下的命令&#xff0c;进行pytorch的安装2.2、测试安装是否成功3、 通过pip命令安装pytorch&am…

基于WPS实现Excel表的二级下拉选择框

基于WPS实现Excel表的二级下拉选择框第一步&#xff1a;先在sheet2上创建源数据第二步&#xff1a;创建一级下拉框第三步&#xff1a;创建二级下拉框报错记录&#xff1a; “列表源”XXXXXX第一步&#xff1a;先在sheet2上创建源数据 第二步&#xff1a;创建一级下拉框 一级下…

难受啊,备战字节跳动132天,因为一个疏忽让我前功尽弃...

&#x1f4cc; 博客主页&#xff1a; 程序员二黑 &#x1f4cc; 专注于软件测试领域相关技术实践和思考&#xff0c;持续分享自动化软件测试开发干货知识&#xff01; &#x1f4cc; 如果你也想学习软件测试&#xff0c;文末卡片有我的交流群&#xff0c;加入我们&#xff0c;一…

Kibana报错:Kibana server is not ready yet

背景 网页中访问kinaba http://localhost:5601 ,一直提示“Kibana server is not ready yet”。 执行如下命令查看kibana日志&#xff0c; docker logs kibana 发现有提示&#xff1a; 正文 怀疑是不是容器重启后&#xff0c;各容器内部ip变化了导致。 1、故执行如下命令查看…

Android框架源码分析——从设计模式角度看 RxJava 核心源码

从设计模式角度来看 RxJava 核心源码 从订阅者模式和装饰器模式的角度来看 RxJava 源码。 1. 普通订阅者模式与 RxJava 中的订阅者模式 订阅者模式又叫做观察者模式&#xff0c;主要用于实现响应式编程。其本质&#xff0c;就是接口回调。 普通订阅者模式&#xff1a;多个对…

来啦,华东师范大学2024年入学MBA提前面试流程及时间

项目简介华东师范大学系国家教育部和国务院学位办【2007&#xff08;36&#xff09;号】批准的工商管理硕士&#xff08;MBA&#xff09;培养单位。华东师范大学MBA项目&#xff0c;依托学校深厚的人文底蕴和育人文化&#xff0c;利用多学科支撑的优势、利用多元化的办学资源&a…

CUAD学习笔记

目录一、头文件**1、mex.h****2、matrix.h****3、string****4、iostream****5、omp.h**6、cuda_runtime.h7、stdlib.h8、sys/time.h9、stdio.h10、string.h11、time.h12、math.h13、device_launch_parameters.h二、一些声明语句1、using namespace std**2、typedef unsigned ch…

pytorch数据读取深入理解

来源&#xff1a;投稿 作者&#xff1a;小灰灰 编辑&#xff1a;学姐 了解数据 Q&#xff1a;我现在什么基础也没有&#xff0c;我要学习深度学习&#xff0c;学习cv&#xff0c;学习nlp。 A&#xff1a;首先我们知道&#xff0c;深度学习是建立在数据集的基础上。现在呢&…

【C++】C++11 ~ 右值引用和移动语义

&#x1f308;欢迎来到C专栏~~右值引用和移动语义 (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort目前状态&#xff1a;大三非科班啃C中&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自己的一…

mongodb 使用密钥文件身份验证部署副本集

一 副本集介绍 集群中每个节点有心跳检测 如果由于资源限制&#xff0c;可以部署一主一从一仲裁 副本集集群可以实现主从的自动切换 Read Preference 在客户端连接中&#xff0c;可以实现读取优先&#xff0c;就是连接器会自动判断&#xff0c;把读取请求发送到副本集中的…

whois命令常见用法

whois命令常见用法whois命令简介安装whoisWindows使用whoisLinux安装whoiswhois常见用法Linux下whois查询域名注册信息whois命令简介 whois就是一个用来查询域名是否已经被注册&#xff0c;以及注册域名的详细信息的数据库&#xff08;如域名所有人、域名注册商&#xff09;。…

分析第一个安卓项目

整体分析 .gradle和.idea 这两个目录下放置的都是Android Studio自动生成的一些文件&#xff0c;我们无须关心&#xff0c;也不要去手动编辑。 app 项目中的代码、资源等内容几乎都是放置在这个目录下的。 gradle 这个目录下包含了gradle wrapper的配置文件&#xff0c;使…

flowable流程设计器的几个bug修改记录

今天根据客户反馈开源项目宁波阿成 (nbacheng) - Gitee.com 有一些bug&#xff0c;主要是前端的&#xff0c;所以今天修正一下 1、对于第一个节点是发起人&#xff0c;后面是多人选择的时候&#xff0c;approval数据被清空了 就是上面的流程&#xff0c;发现有问题 对这种情…

实例13:体育竞技分析

高手过招&#xff0c;胜负只在毫厘之间 计算思维&#xff1a;抽象自动化 模拟&#xff1a;抽象比赛过程自动化执行N场比赛 当N越大时&#xff0c;比赛结果分析会越科学 自顶向下&#xff1a;解决复杂问题的有效方法&#xff0c;将总问题拆分为小问题&#xff0c;分而治之自底向…

【微服务】分布式搜索引擎elasticsearch(3)

分布式搜索引擎elasticsearch&#xff08;3&#xff09;1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法1.2.5.小结1.3.RestAPI实现聚合1.3.1.API语法1.3.2.业务需求1.3.3.业务实现2.自动补全2.1.拼音分…

微信小程序 java php校园快递物流取件及上门服务

系统分为用户和管理员两个角色 用户的主要功能有&#xff1a; 1.用户注册和登陆系统 2.用户查看系统的公告信息 3.用户在线快递下单&#xff0c;支付订单&#xff0c;在线订购快递取件 4.用户在线预约快递&#xff0c;填写快递预约信息 5.用户个人中心在线充值 6.用户个人中心修…

若依配置教程(七)Excel预览功能实现

实现效果及源码 实现效果如下图所示&#xff1a; 实现思路&#xff1a; 1.动态表格&#xff1a;定义表头数组&#xff0c;表格遍历表头生成表格列 2.读取excel文件内容&#xff0c;封装表头&#xff0c;绑定表格数据 代码修改 首先参考若依官网&#xff0c;先实现excel导入功…

浅析综合型大厦视频监控平台建设的必要性和重点功能

一、方案背景随着现代科学技术的发展&#xff0c;监控系统已成为综合型大厦安全防范必不可少的一部分。为了保障整个大厦的安全管理&#xff0c;借助安防监控系统能够迅速而有效地全面管理、禁止或处理突发性事件。因此建设一套优良的监控系统对于大厦各方面的管理都显得尤为重…

从零开始配置vim(31)——git 配置

很抱歉又拖更了这么久了&#xff0c;在这个新公司我想快速度过试用期&#xff0c;所以大部分的精力主要花在日常工作上面。但是这个系列还是得更新下去&#xff0c;平时只能抽有限的业余时间来准备。这就导致我写这些文章就慢了一些。 废话不多说&#xff0c;咱们正式开始有关g…