一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯

2023-05-16

相信大部分人早期入门STM32系列单片机都是从各种例程入手的,STM32单片机繁多的寄存器已经不允许我们像学51系列单片机一样直接操作寄存器了(如果你记忆力好,或者愿意花很多时间翻芯片手册查看对应寄存器的则当我没说过哈),而早期的stm32基本都是运用标准库函数进行编程的,而如今ST公司为了在移植时的方便性推出了HAL库,并且开发了相应的开发软件Stm32CubeMX用于轻松配置所需要的功能外设等,不再需要像以前一样找各种外设例程拷贝各种外设是如何配置的了。
接下来让我们一步步学习如何使用STM32CubeMX,并尝试跑一跑freertos系统,跑系统的好处就不必多说了,最大的好处就是不用考虑过多的程序先后顺序和逻辑了,只需要将所需要的功能配置成各个任务执行就可以了。

1. 打开STM32CUBEMX后选择此项:
在这里插入图片描述

2.选择对应的使用的单片机型号,这里我使用的是STM32F103C8:
在这里插入图片描述
3.接下来进行单片机工作配置,首先配置晶振模式:
在这里插入图片描述
配置仿真烧录模式(这里选择SW模式,即到时候生成keil工程后选择SW烧录仿真):
在这里插入图片描述
配置时钟:
在这里插入图片描述
4.进行功能外设的配置(包括一个IO口和一个UART串口):
在这里插入图片描述
此时可以看到界面已经配置好一个IO管脚了,我们可以再次对其进行修改:
在这里插入图片描述
5.配置uart串口(此处由于我使用了串口中断,所以使能NVIC):
在这里插入图片描述
使能串口中断(不使能到时候无法使用串口IT中断接收和发送功能):

在这里插入图片描述
6.移植freertos系统,并创建两个任务(只需创建多1个,初始已有1个):
在这里插入图片描述
7.进行工程保存与转换的配置:
在这里插入图片描述
在这里插入图片描述
8.保存工程并进行转换:
在这里插入图片描述
9.等待转换完成,到保存路径中打开对应程序工程:
在这里插入图片描述
10.对应工程进行程序修改:
在这里插入图片描述
查看main文件,可以看到串口1和PC13初始化已经帮我们初始化配置好了,我们要进行的操作仅仅是根据自身需求进行对应外设的功能操作(真方便呀!):
在这里插入图片描述
可以看到freertos的两个任务也在main文件中,接下来我们就把任务1设置为PC13驱动LED灯闪烁,任务2则进行串口1的通信:
在这里插入图片描述
对应此部分代码也copy给各位吧:

void StartDefaultTask(void const * argument)
{
  /* USER CODE BEGIN 5 */
  /* Infinite loop */
  for(;;)
  {
    osDelay(500);//500Ϊ500ms
		HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13);//·­×ªPC13¿Úµçƽ
  }
  /* USER CODE END 5 */
}

/* USER CODE BEGIN Header_StartTask02 */
/**
* @brief Function implementing the myTask02 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask02 */
void StartTask02(void const * argument)
{
  /* USER CODE BEGIN StartTask02 */
  /* Infinite loop */
 	uint8_t rec_buf[8],send_buf[]={'r','e','c'};//ÅäÖÃ1¸ö½ÓÊÕÊý×飬1¸ö·¢ËÍÊý×é
	HAL_UART_Transmit(&huart1, "hello", 5,0xFFFF);//ʹÓô®¿Ú1·¢ËÍ"hello"×Ö·û´®£¬¶ÔÓ¦5¸ö×Ö½Ú£¬³¬Ê±·¢ËÍʱ¼äΪ0xFFFF
  HAL_UART_Receive_IT(&huart1,rec_buf,1);   //¿ªÆô´®¿Ú½ÓÊÕÖжϣ¬ÅäÖô®¿Ú1½ÓÊÕrec_bufÒ»¸ö×Ö½Ú
  for(;;)
  {
    osDelay(1);
		if(rec_buf[0]=='a')//µ±½ÓÊÕµ½Îª×Ö·û´®aʱ£¬·µ»ØÊä³ösend_buf,¼´Êä³örec
		{
			rec_buf[0]=0;
			HAL_UART_Transmit_IT(&huart1, send_buf, sizeof(send_buf));
		}
			HAL_UART_Receive_IT(&huart1,rec_buf,1);   
  }
  /* USER CODE END StartTask2 */
}

*大家是不是疑惑这些操作函数从哪来的呢,他们都在对应的.h文件中;
首先我们编译整个工程,让文件链接好,再点开+号项,就可以查看相关链接文件了,我们以查看GPIO操作函数为例:

在这里插入图片描述
*
11.程序烧录与结果(手上必须有烧录器和单片机,我的是cmsis-dap和stm32f103c8开发板,总成本40块左右,想自己动手而自己手头又没有的朋友可以去某宝上面逛逛):
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在连接好硬件设备的情况下,单击此处进行程序烧录:
在这里插入图片描述
然后我们就可以复位单片机观察单片机的工作情况了,如果你们的LED灯跟我一样接在PC13口的话,可以看到LED灯以500ms的频率在亮灭闪烁,然后通过串口助手观察串口1是否工作正常:
在这里插入图片描述
可以看到复位单片机后接收区收到“hello”字符串,当我们以115200的波特率发送文本数据“a”,接收区可以正确收到“rec”。
好了,本次教程到此为止,第一次写得这么详细,希望各位都可以轻松上手!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯 的相关文章

  • 卷积神经网络的特征图可视化秘籍——PyTorch实现

    卷积神经网络的特征图可视化秘籍 PyTorch实现 可视化的定义及步骤PyTorch实现以预训练好的VGG16为例进行可视化关键代码剖析如果是自行搭建的网络 xff0c 如何索引网络层 xff1f 继续使用序号索引不使用序号 xff0c 直
  • pip出现的问题

    正常使用示例 xff1a 安装numpy pip install numpy 临时加镜像源 pip install numpy i https pypi tuna tsinghua edu cn simple 镜像源 xff1a 清华 xf
  • 词权重 (term weight)方案总结

    目录 1 无监督 unsupervised 方法1 1 统计方法 xff08 TF TF IDF YAKE 1 2 图方法 TextRank SingleRank TopicRank PositionRank 2 有监督 supervise
  • Windows上安装Curl工具

    一 介绍 curl是利用URL语法在命令行方式下工作的开源文件传输工具 它被广泛应用在Unix 多种Linux发行版中 xff0c 并且有DOS和Win32 Win64下的移植版本 二 安装步骤 2 1 下载资源包 官网 xff1a htt
  • ESP8266 Arduino开发环境从零开始配置

    目录 1 安装Arduino IDE2 添加 ESP8266 支持3 添加依赖库4 完毕 1 安装Arduino IDE Arduino IDE 是由 Arduino 官方提供的支持 C 语言的集成开发环境 xff0c 主要是针对 Ardu
  • 使用HDFS的Java接口对文件基本操作

    使用HDFS的Java接口进行文件的读写 FileSystem对象 要从Hadoop文件系统中读取文件 xff0c 最简单的办法是使用java net URL对象打开数据流 xff0c 从中获取数据 不过这种方法一般要使用FsUrlStre
  • elastic学习笔记(一)

    elasticsearch安装 xff08 V7 10 0 xff09 踩坑笔记 一 elasticsearch在6 X版本后不允许使用root账户启动 创建其他账户 adduser es 创建密码 passwd es 二 生产环境安装完毕
  • 主机可以ping通虚拟机但无法访问虚拟机某一端口

    问题描述 主机可以ping通虚拟机 xff0c 但是服务器启动状态下访问 192 168 200 152 8888失败 背景 UFW防火墙已经开放 8888 端口 原因和解法 firewall这个防火墙的8888端口没有开放 xff0c 使
  • WSL安装ubuntu18.04+2016VCS+Verdi——记录安装过程错误

    前言 xff1a 安装过程花了一个星期 xff0c 最开始是wsl的图形化界面一直没搞出来 xff0c 等图形化界面安装好之后 xff0c 安装vcs和verdi的过程又是一波三折 xff08 这段可不看 xff0c 总结一下自己踩过的坑
  • 【stm32】ST-LINK Connection error解决方法之一

    ST LINK报错原因之一 xff1a 固件丢失 好久没有用开发板和stlink xff0c 今天发现下载报错 xff0c 明明电脑已经装了stlink驱动 猜测可能是stlink固件丢失 span class token number 1
  • 云服务器VNC安装教程

    文章目录 1 VNC Viewer 注册及安装2 云服务器安装配置2 1 ssh安装和配置2 2 Tightvncserver 安装2 2 安装 gnome 桌面2 3 远程连接端口开启2 4 Xstartup文件编辑2 5 云服务器端口配
  • 浅谈STP协议

    1 STP协议解决什么问题 xff1f 解决网络拓扑中冗余链路产生的环路问题 2 STP协议有什么优缺点 xff1f 解决树形接口的可靠性问题 xff0c 有主备线路 xff0c 当主链路出现故障后 xff0c 可以感知网络的变化 xff0
  • Linux下CMake学习笔记和在QT的应用

    一 cmake的介绍 CMak可以让我们通过编写简单的配置文件去生成本地的Makefile xff0c 这个配置文件是独立于运行平台和编译器的 xff0c 这样就不用亲自去编写Makefile了 xff0c 而且配置文件可以直接拿到其它平台
  • WinIO:一个底层的键盘事件模拟工具

    当我们需要程序模拟键盘事件时 xff0c 通常会这样写 xff1a C xff1a keybd event JAVA xff1a robot keyPress 但是在某些情况下 xff0c 这么写并不能实现需求 xff0c 例如用程序在密码
  • gcc: error: unrecognized command line option ‘-std=c++14’ 问题解决

    问题描述 xff1a 安装一些python包 实际场景为py3安装infomap 时报错 xff1a gcc error unrecognized command line option std 61 c 43 43 14 环境 cento
  • 无监督预训练 & 有监督预训练

    本文参考了几篇其他博客 xff0c 具体链接在对应部分有提供 无监督预训练 xff08 unsupervised pre training xff09 无监督预训练策略 xff0c 主要应用于 复杂任务 43 少量标记数据集 xff0c 即
  • VSCode 是什么

    VSCode 是什么 xff0c VS Code的全称是Visual Studio Code xff0c 但这全名实在是太长了 xff0c 很多用户喜欢叫它VS Code 说起VS Code xff0c 官方定义它是一个免费的 开源的跨平台
  • SDN控制器之OVN实验二:使用OVN配置路由器

    概览 基于我上一篇文章中的实验环境 xff0c 我现在将第三层网络基础功能添加到OVN中 最终呈现出来的将是由逻辑路由器连接的一对逻辑交换机 另外 xff0c 路由器将被配置为通过OVN中内置的DHCP服务来提供IP地址 重构逻辑组件 由于
  • 树莓派自带VNC黑屏(灰屏)个人解决办法

    最近购买了树莓派 xff14 xff22 看来许多教程 xff0c 但VNC第一次还正常显示 xff0c 后来就黑屏 xff0c 还有什么现在不能显示桌面什么的 xff0c 下面给大家说下vnc黑屏我的解决办法 xff0c 我发现是vncv
  • Neutron基础知识学习1

    Neutron OpenStack通过Neutron项目在物理网络环境之上提供满足多租户要求的虚拟网络和服务 Neutron提供的网络虚拟化能力包括 xff1a xff08 1 xff09 二层到七层网络的虚拟化 xff1a L2 xff0

随机推荐

  • 使用百度echarts制作可视化大屏——最终效果和动态数据刷新

    最终效果如下图 xff1a 接下来就是数据动态刷新了 xff0c 这个没什么好说的 xff0c 就是一个 post的事 xff0c 传递一个json给自定义的refresh函数就行了 post url null function d ref
  • 简单记录ESP8266WIFI模块网络调试过程,测试通过。

    本文目的 xff0c 使用WIFI模块连接阿里云飞燕平台 xff0c 调试之前我想先测试一下买回来的WIFI模块是否能正常使用 xff0c 可以通过网络调试助手进行测试 以手机WIFI提供局域网环境 xff0c PC端和WIFI模块连接手机
  • 在vue-element-ui的时候 如果同时使用了animated会出现模态框层级显示错误问题

    同时使用element ui 和animated的时候 模态框的层级会出问题 这个时候需要做动画 最好还是用vue原带的动画组件transition和transition group xff0c 然后自定义动画
  • tensorflow数据清洗

    import tensorflow as tf import numpy as np import random import os import math from matplotlib import pyplot as plt def
  • 利用PHPExcel导出数据,下载excel文件正常,打开报错:'break' not in the 'loop' or 'switch' context

    今天有一个需求 xff0c 是利用phpexcel类导出数组为excel文件并下载 xff0c 我本地用的是phpstudy环境 xff1a php版本7 1 13 下载文件正常 xff0c 但是导出的excel文件里面是报错信息 如下 于
  • 如何利用python开启简单http server服务

    一 背景 有时候搭建一个简易的http服务器可以大大提高工作效率 xff0c 比如局域网内共享文件 xff0c http测速等 下文将介绍一种使用python开启简单http server服务的方法 二 构建步骤 1 将python添加到环
  • alembic教程

    安装 pip install alembic 步骤 1 初始化 alembic 仓库 在终端中 xff0c cd 到你的项目目录中 xff0c 然后执行命令 alembic init alembic xff0c 创建一个名叫 alembic
  • 【MATLAB】多个子图之间colorbar不共享问题解决方法

    在实验时 xff0c 发现subplot后每个子图的colorbar不统一 xff0c 于是一番百度 找到解决方法 xff1a 在绘制每个子图后 xff0c 使用caxis 0 1 命令 xff0c 成功解决 for example spa
  • 手把手教你调整电脑磁盘的分区大小

    教程目录 一 前言二 准备工具三 注意事项四 分区步骤 一 前言 我们电脑在使用过程中会下载很多软件 xff0c 尤其是我们计算机专业 xff0c 那不各种IDE装起来 xff0c 这时候会导致某个盘的空间不足 xff0c 需要给它再分些空
  • VirtualBox快照创建

    1 点击控制 gt 生成备份系统快照 2 添加快照名称和描述 xff0c 方便以后还原 3 等待一会 4 备份完成后可在VirtualBox管理器中看到生成的备份
  • putty连接出现remote side unexpected closed network-connection错误

    putty远程连接Red Hat Enterprise Linux 出现remote side unexpected closed network connection错误 查看日志文件 val log secure span class
  • IDEA 创建Servlet项目

    1 打开IDEA xff0c 点击Create New project创建一个一个新项目 2 点击Java Enterprise xff0c 然后选择Web Application xff0c 点击Next 3 设置项目名 xff0c 项目
  • 数据库接口类和接口实现类

    数据库接口类 xff08 BasicDAO java xff09 xff1a 实现对数据库的直接增删查改的interface接口 span class token keyword import span java span class to
  • Linux安装Anaconda

    Anaconda是一个开源的Python发行版本 xff0c 其包含了conda Python等180多个科学包及其依赖项 一 安装Anaconda 1 下载Anaconda安装包 xff08 我的位置是hadoop的家目录 xff0c 即
  • Windows 安装Maven3.6.1

    Win10 安装Maven3 6 1 xff0c 并为IntelliJ IDEA配置本地maven 一 安装Maven二 配置Maven本地仓库三 为IntelliJ IDEA配置本地maven 一 安装Maven 1 前提安装好jdk 2
  • 使用gorm创建casbin数据库报错

    1 报错 span class token operator span github span class token punctuation span com span class token operator span casbin s
  • Java 操作HBase

    Java 操作HBase 思路 1 建立连接 2 针对表的操作 xff08 创建表 删除表 判断表是否存在 使用 禁用表 列出表 xff09 3 针对数据的操作 xff08 添加 删除 修改 查看 xff09 4 关闭连接 HBase常用的
  • strtok和strtok_s函数使用说明

    看了很多高赞CSDN文章和百度百科 xff0c 越看越晕 xff0c 浪费好多时间 xff0c 特此记录 先介绍strtok xff0c 后边给个strtok s的例子 注意 xff1a 这两个函数必要连续调用多次才能实现分割和输出功能 x
  • chmod修改权限的用法

    一 chmod作用 xff1a 修改文件 目录的权限 二 语法 xff1a chmod 对谁操作 操作符 赋予的权限 文件名 三 操作对象 xff1a u 用户user xff0c 表现文件或目录的所有者 g 用户组group xff0c
  • 一篇文章入门Stm32CubeMX在freertos系统下进行uart串口通讯

    相信大部分人早期入门STM32系列单片机都是从各种例程入手的 xff0c STM32单片机繁多的寄存器已经不允许我们像学51系列单片机一样直接操作寄存器了 xff08 如果你记忆力好 xff0c 或者愿意花很多时间翻芯片手册查看对应寄存器的