【STM32入门教学】——串口、定时器与参考资料

机器人工程系列文章目录

这里罗列了系列文章链接


概念总述

STM入门教学

还没写完组里急用


文章目录

  • 机器人工程系列文章目录
    • 概念总述
    • STM入门教学
  • 前言
  • 串口
    • 串口的概念
    • cubemx
    • keil5
    • 实物实验
    • 关于cubemx生成逻辑
    • printf升级
    • usart.c
    • main.h
    • retarget.c
  • 定时器
    • 定时器的概念
    • cubemx
    • keil5
    • stm32f4xx_it.c
  • 关于参考资料
    • 参考库文件
    • 参考数据手册
    • 样例工程
    • 参考别人的工程


前言

咳咳,最近出差,手边没实物,实物演示等我回实验室慢慢更

串口

串口的概念

这个东西叫串口,也叫UART或者USART,他是实现单片机交互数据的一种方式,当然可以给你的电脑提供数据交互
在这里插入图片描述
观察他的接口上会写着TX(transmit)与RX(receive)两个引脚,分别是他的嘴巴(TX)和他的耳朵(RX),显而易见的是如果你希望让两个单片机进行交流,你需要让A设备的RX(耳朵)接上B的TX(嘴巴),而B设备的RX(耳朵)接上A的TX(嘴巴)

cubemx

我们首先打开cubemx文件,选择Connectivity中的USART1,并设置模式为Asynchronous,观察到右侧PA9与PA10被设置为了USART1的RX与TX,点击生成代码

在这里插入图片描述

keil5

打开main.c文件,并在main文件中相应位置添加
在这里插入图片描述

  /* USER CODE BEGIN 2 */
	uint8_t usart1_tx_buf[] = "Hello world\r\n";
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		HAL_UART_Transmit(&huart1, usart1_tx_buf, sizeof(usart1_tx_buf), 0xffff);
		HAL_Delay(1000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

编译并下载

实物实验

打开设备管理器,如果你已经正常安装了各个驱动设备,你大概能看见

打开XCOM,选择

按下单片机的RST按钮

关于cubemx生成逻辑

cubemx的功能是为了帮助你完成大部分的底层逻辑配置,并为提供大量的库函数支持。
通常cubemx会帮你修改你的工程和代码,考虑到用户和cubeMX修改的内容不同,所以文件做了区分,

对于cubeMX生成的文件而言

printf升级

HAL_UART_Transmit();看起来不是很好用,我们会想能不能像平常写C语言一样简单地输出字符。

首先打开usart.c,并在文件最下方加入

usart.c

/* USER CODE BEGIN 1 */
int sendchar (int ch){
	HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 0xffff);
	return ch;	
}
/* USER CODE END 1 */

以及main.h中加入

main.h

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

在文件管理器增加retarget.c文件,并用文本编辑器加入下述文字
在这里插入图片描述

retarget.c

#include <stdio.h>
#include <rt_misc.h>
 
//#pragma import(__use_no_semihosting_swi)//ARM Compiler6²»¼戝import£¬¸ĎªςæµĄځªº¯ʽ
__asm(".global __use_no_semihosting");
 
extern int  sendchar(int ch);  /* in Serial.c */
//extern int  getkey(void);      /* in Serial.c */
extern long timeval;           /* in Time.c   */
 
 
//struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
FILE __stdin;
 
 
int fputc(int ch, FILE *f) {
  return (sendchar(ch));
}
 
//int fgetc(FILE *f) {
// return (sendchar(getkey()));  
//}
 
 
int ferror(FILE *f) {
  /* Your implementation of ferror */
  return EOF;
}
 
 
void _ttywrch(int ch) {
  sendchar (ch);
}
 
 
void _sys_exit(int return_code) {
  while (1);    /* endless loop */
}

回到keil中,双击Application/User/Core,将retarget.c添加到工程中,当然你也可以靠keil中的新建文件去添加,可以自己试试
在这里插入图片描述

接下来你可以将while里的函数做一定替换,可以更加方便的完成通讯。

  /* USER CODE BEGIN 2 */
	uint8_t usart1_tx_buf[] = "Hello world\r\n";
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		printf("Hello World\r\n");
		//HAL_UART_Transmit(&huart1, usart1_tx_buf, sizeof(usart1_tx_buf), 0xffff);
		HAL_Delay(1000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

定时器

定时器的概念

比如你现在要看管一个锅炉,每一小时需要放气一次,放气的工作需要花费你一分钟。你会有以下几种情况

  1. 你可以拿着一个计时器,每当计满一小时后,你去放一次气,这样每次放气的循环会维持在61分钟,长期这么做设备可能就会出现损坏。
  2. 你可以估算下自己放气的时间,如果是一分钟的话,我用计时器计算59分钟,这样循环可以稳定在60分钟。
  3. 你现在不止有放气的一个任务,你还需要加煤,还需要加水,还需要写报告,而且每个任务消耗的你时间是不确定的,可能是2分钟,可能是10分钟。为了更准确保证一小时放一次气,你决定选一个闹钟,每一小时提醒你做一轮工作。

定时器的核心功能体现在可以保证任务按照一定频率的完成,实际上单片机运行过程中任务时长是不确定的,为了确定一个稳定的工作频率,定时器的引入是必须的。

cubemx

选择Timers中的TIM11,勾选Activated。
Prescaler中写为99,我们上一章设置主时钟为100Mhz,意味着单片机一刻时钟为0.01us,但通常高频会造成更高的能耗,因此需要根据实际需求进行降频并分配给子定时器。写为99实际为100,这是因为程序通常从0开始计数,因此100Mhz会被分频100转换为1Mhz,也就是1us作为时钟的一刻。
Counter Period设置为999,这意味着我们计数1000则重新开始计数,也就意味着这个定时器每1ms就会自动刷新一次。
在这里插入图片描述
这还不够,定时器会单独在那运行,但他不会提醒你,因此选择NVIC Setting中,设置定时器中断开启,这样每1ms都会被提醒完成一次工作。

在这里插入图片描述

keil5

所以中断会怎么被提醒去工作呢,在stm32

做如下修改

stm32f4xx_it.c

void TIM1_TRG_COM_TIM11_IRQHandler(void)
{
  /* USER CODE BEGIN TIM1_TRG_COM_TIM11_IRQn 0 */
  static uint32_t counter;
	
	counter++;
	if(counter>999)
		counter=0;
	
	printf("Hello World\r\n");

  /* USER CODE END TIM1_TRG_COM_TIM11_IRQn 0 */
  HAL_TIM_IRQHandler(&htim11);
  /* USER CODE BEGIN TIM1_TRG_COM_TIM11_IRQn 1 */

  /* USER CODE END TIM1_TRG_COM_TIM11_IRQn 1 */
}

关于参考资料

写到现在比较困惑的一个问题是,这些东西我怎么理解?有哪些功能?有哪些函数?通过ST官方文件我们可以做如下了解。

参考库文件

函数右键Go to the Definition可以进入库函数定义文件,可以阅读英文注释了解函数具体使用。

参考数据手册

cubemx的Help->Docs&Resources,会有大量的stm32数据手册,可以多多参考阅读。
Description of STM32F4 HAL and low-layer drivers

样例工程

除了上述文档,ST提供了相关的工程文件作为参考
通常目录会放在
C:\用户\STM32Cube\Repository
其中的文件夹中有对应版本库的相关资料,包含了大部分HAL库与LL库的使用范例,就不用头疼的全网找资料了(一个个打开来看看吧)
在这里插入图片描述

参考别人的工程

学习学习别人的工作,了解了解别人如何应用设备芯片,可以帮助你更快的搭建自己的工程

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA中使用Maven打包及碰到的问题

1. 项目打包 IDEA中&#xff0c;maven打包的方式有两种&#xff0c;分别是 install 和 package &#xff0c;他们的区别如下&#xff1a; install 方式 install 打包时做了两件事&#xff0c;① 将项目打包成 jar 或者 war&#xff0c;打包结果存放在项目的 target 目录下。…

医疗器械FDA | 医疗器械软件如何做源代码审计?

医疗器械网络安全测试https://link.zhihu.com/?targethttps%3A//www.wanyun.cn/Support%3Fshare%3D24315_ea8a0e47-b38d-4cd6-8ed1-9e7711a8ad5e 医疗器械源代码审计是一个确保医疗器械软件安全性和可靠性的重要过程。以下是医疗器械源代码审计的主要步骤和要点&#xff0c;以…

MIX OTP——依赖项和总体项目

在本章中&#xff0c;我们将讨论如何管理 Mix 中的依赖项。 我们的 kv 应用程序已经完成&#xff0c;现在是时候实现处理我们在第一章中定义的请求的服务器了&#xff1a; 但是&#xff0c;我们不会向 kv 应用程序添加更多代码&#xff0c;而是将 TCP 服务器构建为另一个应用程…

ROS2 rosbag2记录仪

rosbag2类似于行车记录仪&#xff0c;录制一段话题数据&#xff0c;录制完成后可以多次发布出来进行测试和实验&#xff0c;也可以将话题数据分享给别人用于验证算法等。 1.启动talker服务 ros2 run demo_nodes_cpp talker 2.记录话题数据 chatter ros2 bag record /chatte…

数据库操作-DML和DQL

DML DML英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据库中表的数据记录进行增、删、改操作。 添加数据&#xff08;INSERT&#xff09; 1.指定字段添加数据&#xff1a; insert into 表名 ( 字段名 1, 字段名 2) values ( 值 1, 值 2); 2…

O2OA(翱途)开发平台 V9.1 即将发布,更安全、更高效、更开放

尊敬的O2OA(翱途)平台合作伙伴、用户以及亲爱的开发小伙伴们&#xff0c;O2OA(翱途)平台 V9.1将于7月3日正式发布&#xff0c;届时欢迎大家到O2OA官网部署下载及体验最新版本。新版本我们在如下方面做了更大的努力&#xff1a; 1.扩展数据库兼容性和功能范围&#xff1a;在O2OA…

[SwiftUI 开发] 嵌套的ObservedObject中的更改不会更新UI

1. 发生问题的demo 业务逻辑代码 class Address: ObservableObject {Published var street "123 Apple Street"Published var city "Cupertino" }class User: ObservableObject {Published var name "Tim Cook"Published var address Addr…

使用Python绘制动态螺旋线:旋转动画效果

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame绘制螺旋线函数主循环 完整代码 引言 螺旋线是一个具有美学和数学魅力的图形。通过编程&#xff0c;我们可以轻松创建动态旋转的螺旋线动画。在这篇博客中&#xff0c;我们将使用Python和Pygame库来实现…

XTDrone-固定翼无人机编队跟踪无人车-配置教程

配置使用ROS版本为Neotic 1 配置 1.1 加载固定翼无人机编队跟踪控制工程文件 cp -r ~/XTDrone/coordination/fixed_wing_formation_control ~/catkin_ws/src 1.2 加载一些用到的功能包 sudo apt-get install ros-noetic-serial #根据自己的ROS版本修改 sudo apt-get insta…

试用笔记之-免费的汇通餐饮管理软件

首先下载免费的汇通餐饮管理软件&#xff1a; http://www.htsoft.com.cn/download/htcanyin.exe 安装后的图标 登录软件&#xff0c;默认没有密码 汇通餐饮管理软件主界面 汇通餐饮软件前台系统 点菜

synchronized用法解析

锁的意义&#xff1a; 比如我跟我老弟要用电脑&#xff0c;我想学java&#xff0c;他想拿电脑打LOL&#xff0c;如果我敲java代码敲的正嗨皮&#xff0c;他突然把电脑抢了过去&#xff0c;代码还没保存&#xff0c;就被他拿去打LOL了&#xff0c;很✓8&#xff0c;那么如何解决…

【Arduino】XIAOFEIYU实验ESP32实验热敏电阻(图文)

今天XIAOFEIYU来实验一下ESP32使用热敏电阻传感器。 热敏电阻具有测试灵敏&#xff0c;测试范围大的特点&#xff0c;具有广泛的使用范围。常温器件适用于-55℃&#xff5e;315℃&#xff0c;高温器件适用温度高于315℃&#xff08;目前最高可达到2000℃&#xff09;&#xff…

[图解]SysML和EA建模住宅安全系统-07-to be块定义图

1 00:00:00,180 --> 00:00:06,820 我们来看&#xff0c;这是之前的那张图&#xff0c;现有的 2 00:00:08,290 --> 00:00:09,160 我们怎么做 3 00:00:09,170 --> 00:00:11,280 你看&#xff0c;我们之前 4 00:00:11,290 --> 00:00:15,600 在现状&#xff0c;as i…

Android AlertDialog对话框

目录 AlertDialog对话框普通对话框单选框多选框自定义框 AlertDialog对话框 部分节选自博主编《Android应用开发项目式教程》&#xff08;机械工业出版社&#xff09;2024.6 在Android中&#xff0c;AlertDialog弹出对话框用于显示一些重要信息或者需要用户交互的内容。 弹出…

GeoServer改造Springboot源码十(样式管理设计)

GeoServer改造Springboot源码一&#xff08;公共部分&#xff09; GeoServer改造Springboot源码二&#xff08;数据源管理设计&#xff09; GeoServer改造Springboot源码三&#xff08;数据源管理代码&#xff09; GeoServer改造Springboot源码四&#xff08;图层管理设计&a…

【知识】DGL中graph默认的稀疏矩阵格式和coo格式不对的坑

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 先给结论 源码解读 代码验证 网上没找到相关的讨论&#xff0c;因此只能从源码上一步步查。 先给结论 对于自己使用dgl.graph接口创建的图&am…

20240702在vmware17.5虚拟机中让ubuntu22.04使用主机的代理上网

20240702在vmware17.5虚拟机中让ubuntu22.04使用主机的代理上网 2024/7/2 14:41 百度&#xff1a;vmware 虚拟机 使用主机代理 上网 https://blog.csdn.net/nomoremorphine/article/details/138738065?utm_mediumdistribute.pc_relevant.none-task-blog-2~default~baidujs_ba…

Elasticsearch集群部署(上)

目录 前言 一. 环境准备 二. 实施部署 三. 安装配置head监控插件 &#xff08;只在第一台es部署&#xff09; 四. Kibana部署&#xff08;当前还是在第一台es部署&#xff09; 五. 安装配置Nginx反向代理 六. Logstash部署与测试 前言 1. Elasticsearch&#xff1a; 是…

什么是文档透明加密|好用的文档透明加密软件有哪些?

在当今日益数字化和信息化的时代&#xff0c;数据安全问题愈发受到企业和个人的关注。文档作为信息的重要载体&#xff0c;其安全性不言而喻。为了保障文档的机密性和完整性&#xff0c;文档透明加密技术应运而生。本文将对文档透明加密进行详细介绍&#xff0c;并探讨一些好用…

多模态融合 + 慢病精准预测

多模态融合 慢病精准预测 慢病预测算法拆解子解法1&#xff1a;多模态数据集成子解法2&#xff1a;实时数据处理与更新子解法3&#xff1a;采用大型语言多模态模型&#xff08;LLMMs&#xff09;进行深度学习分析 慢病预测更多模态 论文&#xff1a;https://arxiv.org/pdf/2406…