STM32 串口通信介绍及cubemx配置_Nie_Hen的博客-程序员资料

技术标签: STM32学习与应用  

学习理解STM32的串口通信,中断以及I2C的使用。
应用:使用中断和串口通通信获取按键值发送出来并显示到数码管上。使用I2C 将获取到的按键值保存到内存中。

串口通信

计算机的CPU与外部设备之间的信息交换,以及计算机与计算机之间的信息交换过程称为通信。

  1. 并行通信
    数据字节的各位同时传送的通信方式。并行通信的优点是数据传送速度快,缺点是占用的传输线条数多,适用于近距离通信。
  2. 串行通信(Serial Communication):
    数据字节的各位一位(bit)一位地依次传送的通信方式。串行通信的速度慢,但占用的传输线条数少,适用于远距离的数据传送。

这里我们讲串口通信

  1. 串口通讯协议分为物理层和协议层。
    物理层规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。
    enter description here
    协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。
    enter description here
  2. STM32有3-5个的全双工的异步串行通信USART( 通用同步异步收发器USART)接口
    USART的功能是通过操作相应寄存器实现的,数据寄存器,控制寄存器,控制寄存器等等。
    有两个引脚TX:发送数据输出引脚。
    RX:接收数据输入引脚。
    enter description here =600*500

常用库函数

//查询模式(blocking mode阻塞模式)调用这个函数并在等待时间内一直等待操作完成。
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
//中断模式(non- blocking mode)
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
//DMA模式
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
//中断服务函数
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart);
//中断回调函数
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);
void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart);
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart);

串口接收包括查询模式和中断模式

若单片机作为主机(主动发起通信任务)与其他从机双向通信:
根据任务,查询方式发送、查询方式接收或中断方式接收。
若单片机作为从机与其他主机机双向通信:
中断方式接收,查询方式发送(在接收中断程序中发送)。

STM32 CubeMx实现

  1. 查看原理图可知 A9 为数据发送引脚 A10为数据接收引脚 对应的UART1
    enter description here
  2. 使用CubeMx配置
    引脚配置
    PA9 配置 GPIO mode:Alternate Function push pull
    PA10配置 GPIO mode:input mode
    enter description here
    初始化UART1
    配置模式:异步
    配置参数:
    波特率,115200bps
    字长,8
    奇偶校验,无
    停止位,1
    enter description here
    中断设置
    USART global interrupt:使能
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WTGEidB1-1581689856542)(https://gitee.com/nie_hen/test/raw/master/小书匠/1567758987267.png)]
    在System core 中NVIC下
    设置中断优先级 主优先级1 次优先级0 (可不设)
    生成工程
    填写工程 名字 位置 ,使用IDE ,然后生成工程。

编写代码

查询发送 代码

在main.c 中主函数里 添加 发送代码

HAL_UART_Transmit(&huart1,connctt,15,500);

上面的receive_str 要在前面声明
uint8_t connctt[15]=“hello world”;
上面 发送函数里面参数,第一个为使用中断地址,第二个要发送的数组首地址,第三个发送字符串长度,第四个timeout (超过那个时间没法送成功,就会报错)
如果需要连续发送的到 while循环中,进行发送,加上延时,不然会一直连续发送。
查询接收代码

HAL_UART_Receive(&huart1,receive,15,500);

和查询发送一样 需要对receive进行声明,uint8_t receive[15];
参数也都一样
中断接收代码
/定义变量

uint8_t aRxBuffer;

//开启中断接收

HAL_UART_Receive_IT(&huart1,(uint8_t *)&aRxBuffer,1);

中断回调函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
{
HAL_UART_Transmit(&huart1,(uint8_t ))&aRxBuffer,1,0xffff);  //为验证进入这个函数,把接收到的数据通过串口发送出去
HAL_UART_Receive_IT(&huart1,(uint8_t ))&aRxBuffer,1);   //重新打开串口中断
}

注意中断接收每次接收必须要定长 如果接受到的数据是4个,而函数参数接受5个,那么中断接受不到结束的信号会一直等直到timeout。(查询方式的不需要)

编译
选择要使用的发送方式 和接收方式 写入代码 。
编译 传入hex文件
打开串口工具 (下面所使用到的安装包我都放到了个人网盘上,下载链接
打开串口后 从板子执行发送的字符串就会显示到上面,下面可以进行手动发送
enter description here
(板子不在身边… 没法发测试图了… )
综合应用
综合应用放到另一篇文章上
使用串口通信将按键值发送出来 ,并使用I2C将按键值保存

更多STM32学习教程

  1. STM32 cubemx keil5搭建学习环境
  2. 使用STM32 cubemx keil5实现led灯与数码管控制
  3. 基于STM32 CubeMx keil5实现键盘的应用
  4. 基于STM32 CubeMx keil5实现串口通信 I2C与GPIO综合应用
  5. 基于STM32 CubeMx keil5实现AD转换获取温度
  6. 基于STM32 CubeMx keil5 学习使用I2C
  7. 基于STM32 CubeMx keil5 学习使用串口通信
  8. 基于STM32 CubeMx keil5应用定时器
  9. 基于STM32 cubemx keil5学习使用中断
  10. 基于STM32 cubemx keil5综合应用实现温度控制系统
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Nirvana_6174/article/details/104320919

智能推荐

Neo4j实例:电影关系图_Mortal71的博客-程序员资料

Neo4j管理界面提供了一个官方入门实例“电影关系图”,点击下述步骤。单击实例引导页换页箭头,单击代码块,运行创建关系。一、检索节点例1、查找名为Tom Hanks的人MATCH (TomH {name:"Tom Hanks"})RETURN TomH该命令使用match查找匹配条件{name:“Tom Hanks”}的节点并返回。例2、查找名为Cloud Atlas的电影...

SP2-1503: 无法初始化 Oracle 调用界面_麦田的博客-程序员资料_sp2-1503无法初始化oracle调用界面

问题描述:win7下,cmd运行 输入sqlplus报一下错误SP2-1503: 无法初始化 Oracle 调用界面SP2-0152: ORACLE 不能正常工作解决办法1、cmd右键--以管理员身份运行--ok2、找到oracle安装路径,如 D:\oracle\product\10.2.0\db_2\BIN下面的sqlplusw.exe 右键--以管理员身份运行--ok3、在开始菜单,oracle目录下

腾讯地图H5位置获取_LuHaiPing818的博客-程序员资料_腾讯地图h5页面获取位置

腾讯地图H5位置获取直接ctrl+c 就行了直接打开<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>前端定位模块</title&amp

Android系统架构和内核及虚拟机_lvwei1990的博客-程序员资料_安卓内核包含虚拟机吗

一、Android 体系结构Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。Android主要应用于ARM平台,但不仅限于ARM,通过编译控制,在X86、MAC等体系结构的机器上同样

python的线程和进程_weixin_34413065的博客-程序员资料

1、线程的基本概念概念线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。************************好处(1)易于调度。...

pip安装python包出错 pip install pyCrypto_介亭的博客-程序员资料_ps d:\python1208> pip install pycrypto

pip安装pyCrypto时报错Could not find a version that satisfies the requirement pyCrypto (from versions: ):可能网络的问题,可以使用镜像源加速改为豆瓣源:pip install pyCrypto-i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com或者pip3 install pyCrypto-i htt...

随便推点

蓝懿 ios技术交流和心得分享12.31_凉心垃圾丶的博客-程序员资料

明天就是元旦了  2016年啦   加油吧  明天你好!!键盘监听:#import "ViewController.h"@interface ViewController ()@property (nonatomic, strong)UIToolbar *toolbar;@[email protected] ViewController-

聊聊人们对程序员的偏见_程序员之家v的博客-程序员资料

1024程序员节过去了,码农们也要开始加班了!也许会有人说,加班是程序员的常态,还有人说,程序员工资那么高,当然要加班了!事实真的如此吗?在当下的就业市场下,程序员的高薪人所共知,风头甚至盖过了金融业。有数据显示,互联网从业人员平均年薪高达19万元,其中10%年薪超过50万。▌月入过万,很轻松在这个光鲜的数据下,付出的是程序员的辛

调用google登录的问题Error: redirect_uri_mismatch_a840473451的博客-程序员资料_谷歌登录报错redirect9-url

问题描述:  400. That’s an error.Error: redirect_uri_mismatchThe JavaScript origin in the request, http://www.asiajy.com, does not match the ones authorized for the OAuth client. Visit ht

Spring中Bean的生命周期详解_qq_33436031的博客-程序员资料

Spring中Bean的生命周期详解Spring最重要的功能就是帮助程序员创建对象(也就是IOC),而启动Spring就是为创建Bean对象做准备,所以我们先明白Spring到底是怎么去创建Bean的,也就是先弄明白Bean的生命周期。Bean的生命周期就是指:在Spring中,一个Bean是如何生成的,如何销毁的?...

博客站的优化措施_华尐的博客-程序员资料_博客优化方案 csdn

博客在网络上也趋于一种聊天和求知的平台像一些知名的博客大部分都是名人或者专家以及发表一些权威知识的站长,那么对于我们来说该如何去做好自己的博客呢,利用博客将自己所知道或者自己擅长的一些事一些物通过网络这个平台来展示给大家呢?下面就让武汉得如论坛来跟大家简单的阐述下如何利用一些SEO基础培训里面的知识来做好博客站。  第一点:没有出色的写作能力如何利用SEO知识使博客获得收录和排名 

服务器重装Linux系统详细图文教程(centos7)_标准酷函数的博客-程序员资料_centos7重装系统命令

1.第二次装Linux系统,把第一次的过程忘得一干二净,这次记录下。这里用的是戴尔服务器,首先服务器开机,按F11,进入下页面。选择第二项,BIOS Boot Menu,进入后选择U盘启动。不同型号服务器或电脑的U盘启动快捷键不同,可自行百度。选择U盘启动,这里图片看不清楚,可以通过上下移动光标,寻找包含USB的一项,就是U盘启动项。2.这里选择第一项 Install CentOS..._1671465600

推荐文章

热门文章

相关标签