CubeMX配置:定时器中断及串口配置

news2025/1/17 3:12:15

本文通过CubeMX配置F103RCT6的定时器中断和串口。

文章目录

  • 1 引入
  • 2 配置过程
    • 2.1 配置时钟过程
    • 2.2 配置串口过程
    • 2.3 定时器中断配置
  • 3 生成工程代码
  • 4 测试串口及定时器中断周期
  • 5 总结

1 引入

拿到一个STM32控制器,在啥也没有的情况下从零开始写软件,博主习惯于先配置定时器中断和串口打印。本文就以博主在网上买的小车控制板为例,对其进行最基本的时钟及串口打印配置,并且写一些代码测试一下串口。

定时器中断配置为20ms触发一次中断,并且在中断服务函数中执行应用层相关代码。

2 配置过程

2.1 配置时钟过程

1)首先,新建一个工程,选择MCU型号;
在这里插入图片描述
2)在弹出的型号面板中选择自己购买的开发板上的主芯片型号,这里博主是F103RCT6;
在这里插入图片描述
3)开发板上的PD0和PD1接了8MHz的晶振,所以选择Crystal/Ceramic Resonator,即使用外部晶振作为HSE的时钟源。
在这里插入图片描述
在这里插入图片描述
4)时钟树配置如下图;
在这里插入图片描述
后续的外设会参考到这里的总线时钟。

2.2 配置串口过程

将串口配置为如下所示;
在这里插入图片描述

2.3 定时器中断配置

配置定时器中断时需要考虑避开电机、舵机、编码器等使用过的定时器,所以这里选用TIM5。在STM32手册中可以查询到TIM5的内部时钟来源是APB1总线上。因此,它的基准频率是72Mhz。
在这里插入图片描述
这里的目标是产生20ms的中断,所以博主把预分频系数设置为7200-1,自动重载值设置为200-1。这样就能得到中断频率为72000000/7200/200=50Hz。在CubeMX中的配置如下:
在这里插入图片描述
最后还需要开启中断:
在这里插入图片描述

3 生成工程代码

1)配置生成代码的IDE为STM32CubeIDE;

在这里插入图片描述
2)生成代码配置;
在这里插入图片描述
这里博主勾选了只拷贝必要的库文件,以及生成独立的.c/.h文件,看个人习惯。

4 测试串口及定时器中断周期

1)点击右上角的Generate Code,并Open Projectp;先新建一个user.c和user.h文件,里面存放用户手写的代码;
在这里插入图片描述

2)参考网上其他博客,在user.c中加上重定向函数,这样就可以用printf函数打印数据;

/* USER CODE BEGIN 1 */
#include "stdio.h"

// 重定向print start

int __io_putchar(int ch)

{

//具体哪个串口可以更改USART1为其它串口

while ((UART4->SR & 0X40) == 0); //循环发送,直到发送完毕

UART4->DR = (uint8_t) ch;

return ch;

}



//_write函數在syscalls.c中, 使用__weak定義, 所以可以直接在其他文件中定義_write函數

__attribute__((weak)) int _write(int file, char *ptr, int len)

{

int DataIdx;

for (DataIdx = 0; DataIdx < len; DataIdx++)

{

__io_putchar(*ptr++);

}

return len;

}

// 重定向print end
/* USER CODE END 1 */

2)在main函数中启动定时器并使能中断,在while循环之前;

  /* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start_IT(&htim5);
  /* USER CODE END 2 */

3)重定义中断回调函数,在user.c中加入如下代码;

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{	
	if(htim->Instance == htim5.Instance)
	{
		Test20ms();
	}
}

4)编写test20函数内容,将一个变量没调度一次加20;

float i_20ms = 0.0F;

void Test20ms()
{
	i_20ms = i_20ms + 20.0;

}

5)最后,在主函数的while循环中每过1s通过串口打印出i_20ms的变量值;

  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  printf("i_20ms:%f\r\n",i_20ms);
	  HAL_Delay(1000);
  }

6)烧录程序,通过串口读取,每次i_20ms变量比之前增加1000,说明是按照20ms调度一次定时器中断的;
在这里插入图片描述

5 总结

本文记录了CubeMX配置定时器中断及串口打印的过程,这是玩转开发板的第一步。

>>返回个人博客总目录

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

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

相关文章

Java K 个一组翻转链表

K 个一组翻转链表困难给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。你不能只是单纯的…

电视为何降价至200元依然没人买?爱奇艺给出了答案

近日爱奇艺提高降低会员的服务内容&#xff0c;消费者要享受到将内容投放到电视就要买更贵的会员服务&#xff0c;引发热议&#xff0c;此举或许能解释国内消费者为何如今不买电视了。2022年电视行业可谓是一个相当惨淡的行业&#xff0c;量价齐跌&#xff0c;随着2022年底的到…

计算机视觉OpenCv学习系列:第二部分、图像操作

第二部分、图像操作第一节、图像读取与显示1.图像理解2.图像读取与显示3.代码练习与测试第二节、图像色彩空间转换1.图像色彩空间2.函数说明与解释3.代码练习与测试第三节、图像对象的创建与赋值1.图像对象属性2.图像对象创建与赋值3.代码练习与测试第四节、图像像素的读写操作…

SpringBoot——关于controller参数校验

参数校验主要使用两个标签Validated和Valid&#xff1b; Valid是Hibernate的注解校验&#xff0c;Validated是spring的&#xff0c;是Valid的增强&#xff1b;这两个标签也有一些不同之处&#xff0c;Valid可以标注在成员属性上也可以嵌套校验&#xff0c;而Validated不行&…

Node.js 操作MySQL数据库

在讲Node.js中引入mysql模块之前先讲一下关于MySQL数据库&#xff0c;首先是关于MySQL数据库的安装和mysql服务以及对mysql命令和可视化工具的一个基本使用&#xff1b;那么在这里已经准备好了关于MySQL数据库的内容了&#xff1a; MySQL 数据库安装详细 &#xff1a; MySQL数…

redis主从复制,一主多仆启动流程

文章目录一、安装redis二、复制修改配置文件三、添加conf配置文件四、开启主从复制五、薪火相传六、反客为主7、哨兵模式一、安装redis redis安装笔记 https://blog.csdn.net/G_GUi/article/details/128361131 二、复制修改配置文件 把redis.conf复制到一个新建文件夹里面&a…

安卓手机还有这么多神仙玩法,关键只有少数人知道

随着“智能手机”的快速更新迭代&#xff0c;手机系统逐渐融入了许多实用功能&#xff1b;今年Android手机市场竞争相当激烈&#xff0c;各大手机品牌都争先恐后地向消费者展示自己的新机型。今天我就来给大家分享几个只有安卓手机才有的隐藏黑科技功能&#xff0c;每个功能都非…

cocos creator新手教程:第003节3D模型的基本概念

3.1 计算机如何制作一个3D模型 讲述这个问题之前&#xff0c;我们先来看下现实生活中我们要做一个模型&#xff0c;应该如何做呢&#xff1f;首先我们要把模型的形状给雕刻构建出来&#xff0c;现实生活中的物体都是由分子组成的连续的表面&#xff0c;计算机是离散的无法做到这…

【jQuery】常用API——尺寸、位置操作

一、jQuery 尺寸 以上参数为空&#xff0c;则是获取相应值&#xff0c;返回的是数字型。如果参数为数字&#xff0c;则是修改相应值。参数可以不必写单位。 <style>div {width: 200px;height: 200px;background-color: pink;padding: 10px;border: 15px solid red;margin…

在Windows中安装Mysql数据库(shawn安装成功记录)

一、下载安装包 首先去官网下载mysql安装包 下载网址:https://dev.mysql.com/downloads/mysql/ 下载Windows系统版本,如下图 注意版本必须是8.xx, 5开头的版本不适合本教程   点击下载,选择自己的文件路径,C盘非C盘都可以(我没有放C盘),路径中不要出现中文…

【蓝桥杯简单篇】Python组刷题日寄Part08

刷题日记&#xff1f;刷题日寄&#xff01; 萌新备战蓝桥杯python组 &#x1f339; 发现有需要纠正的地方&#xff0c;烦请指正&#xff01; &#x1f680; 欢迎小伙伴们的三连关注&#xff01; 往期系列&#xff1a; 【蓝桥杯简单篇】Python组刷题日寄Part01 【蓝桥杯简单篇】…

SCRM开源营销平台MarketGo-创建员工活码

一、背景介绍 客户需求&#xff1a;企业在做营销活动的时候&#xff0c;会有大量的客户需要添加企业微信的联系方式。这样就有两个问题&#xff1a; 一个企业微信账号添加太多会受到企业微信的限制&#xff1b;如果有多个企业微信的账号&#xff0c;添加的客户的数量也不平均…

如何给PPT文件添加水印?

我们在制作PPT的时候&#xff0c;有时候需要在幻灯片上加入logo&#xff0c;或者特定的大小、颜色等一致的文字标题&#xff0c;而幻灯片通常都是很多页数的&#xff0c;如果一张张幻灯片来添加&#xff0c;那就很费功夫。 这种情况&#xff0c;我们就可以选择通过“幻灯片母版…

SSL/TLS协议详解 - https为什么比http更安全

概述 首先纠正一个错误&#xff0c;可能很多初学者都以为HTTPS跟HTTP一样&#xff0c;都属于应用层协议。但其实HTTPS并不是一个单独的协议。HTTPS是安全版本的HTTP&#xff0c;简单理解 HTTPS HTTP SSL/TLS&#xff0c;即HTTPS就是使用SSL/TLS协议对HTTP报文进行了加密处理…

一不小心进入“决赛圈”,没“阳过”的怎么办?

前两天看到一个央视新闻&#xff0c;说河南新冠病毒感染率接近90%&#xff0c;流行毒株是奥密克戎BA.5.2&#xff0c;数字让我挺吃惊的&#xff1a;真有这么多人感染了&#xff1f; 如果是这样&#xff0c;我就属于那幸运的10%了&#xff0c;没有经历过刀片嗓&#xff0c;水泥鼻…

机器学习--模型调参、超参数优化、网络架构搜索

目录 一、模型调参 手动调超参数 多次调参的管理 机器调参与人调参的成本比较 自动调参&#xff08;AutoML&#xff09; 总结 二、超参数优化 在搜索空间中选择超参数 HPO算法有哪些 Black-Box Multi-Fidelity 总结 三、网络架构搜索 Neural Architecture Sear…

【Java AWT 图形界面编程】LayoutManager 布局管理器 ② ( FlowLayout 流式布局 )

文章目录一、FlowLayout 流式布局二、FlowLayout 流式布局 API三、FlowLayout 流式布局代码示例1、FlowLayout 流式布局左对齐代码示例及执行效果2、FlowLayout 流式布局居中对齐代码示例及执行效果2、FlowLayout 流式布局右对齐代码示例及执行效果一、FlowLayout 流式布局 Flo…

上半年要完成的博客60

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

RT-Thread系列--对象容器

一、目的RT-Thread号称小而美&#xff0c;那具体美在哪里呢&#xff1f;下面我们就来说说首先&#xff0c;代码简练逻辑清晰明了&#xff1b;其次是框架设计。其创新性的对象容器系统是我认为最优美的设计亮点&#xff0c;本篇的目的就是给大家介绍一下对象容器的设计以及这样设…

sklearn聚类之谱聚类SpectralClustering

文章目录基本原理sklearn中谱聚类的构造实战基本原理 谱聚类是一种基于图论的聚类方法&#xff0c;所谓图&#xff0c;就是将空间中的所有点连接起来&#xff0c;只要这些连接中出现了一个圈&#xff0c;就可以称之为图。如果把这些连线加上一个权重&#xff0c;就叫做加权图。…