stm32串口收发过程_stm32f103数据手册中文

stm32串口收发过程_stm32f103数据手册中文STM32学习笔记 二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发系列文章目录一、基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发三、

STM32学习笔记 二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发   系列文章目录   一、基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁   二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发   三、实战小例程 基于STM32F103C8T6最小系统板和STM32CubeMX驱动WS2812B光立方   四、基于STM32F103C8T6最小系统板HAL库CubeMX驱动HC-SR501红外人体传感模块   五、基于STM32F103C8T6(HAL库)的HC-SR501红外人体传感及HC-SR04超声波测距   文章目录 系列文章目录前言一、配置CubeMX二、HAL库UART相关函数简介2.1 串口发送/接收函数2.2 串口中断函数2.3 串口查询函数 三、逻辑代码部分3.1 UART接收中断3.2 UART发送   前言   这次我用的板子是一个用STM32F103C8T6作为主控芯片的一个数据采集卡,两个LED灯连接的引脚是PB3与PB4,TX与RX引脚分别是PA9和PA10。   完整工程下载链接:   基于STM32F103C8T6(HAL库)和CubeMX实现UART串口通信数据收发.rar   相关基础概念:   基于STM32之UART串口通信协议(一)详解   
在这里插入图片描述   
在这里插入图片描述   一、配置CubeMX   1、新建工程;   2、配置时钟源,在RCC里面的HSE配置的是晶振时钟;   3、配置程序烧录引脚SYS为SWD模式;   4、配置GPIO口,配置一个LED灯(我的板子是PB3),起到串口成功接收到数据时的指示作用;   5、配置串口收发引脚   此处我们采用的通信方式为UART通信(异步全双工串口通信),PA9作为TX,PA10作为RX使用。直接在可视框图里相应的引脚进行配置。   配置到目前,效果图为:   
在这里插入图片描述   可以发现,TX和RX两个引脚配置完之后是黄色的,代表还没有配置完毕,下面继续进行配置。   6、在左边的”Connectivity”里面的USART1模式里选择异步全双工通信模式asynchronous   ⮚USATR1   ⮚设置MODE为异步通信(Asynchronous)   ⮚基础参数:波特率为 Bits/s。传输数据长度为8 Bit。奇偶检验无,停止位1,接收和发送都使能   ⮚GPIO引脚设置 USART1_RX/USART_TX   ⮚NVIC Settings 一栏使能接收中断   这里简单扩展一下:   STM32F103系列单片机共有5个串口,其中1-3是通用同步/异步串行接口USART(Universal Synchronous/Asynchronous Receiver/Transmitter),4,、5是通用异步串行接口UART(Universal Asynchronous Receiver/Transmitter)。   
在这里插入图片描述   
在这里插入图片描述   
在这里插入图片描述   7、配置时钟树,我还是开到最高的72MHz   8、进行项目设置,最后生成代码,CubeMX部分就大功告成了   二、HAL库UART相关函数简介   2.1 串口发送/接收函数   这六个函数参数基本一致,发送/接收各挑一个常用的函数进行简单介绍:   串口发送数据:   功能:   串口发送指定长度的数据。如果超时没发送完成,则不再发送,返回超时标志(HAL_TIMEOUT)。   参数:   ⮚ UART_HandleTypeDef *huart UART的别名 如 : UART_HandleTypeDef huart1; 别名就是huart1   ⮚ *pData 需要发送的数据   ⮚ Size 发送的字节数   ⮚ Timeout 最大发送时间,发送数据超过该时间退出发送   举例: HAL_UART_Transmit(&huart1, (uint8_t *)ZZX, 3, 0xffff); //串口发送三个字节数据,最大传输时间0xffff   串口接收数据:   功能:   串口中断接收,以中断方式接收指定长度数据。   大致过程是,设置数据存放位置,接收数据长度,然后使能串口接收中断。接收到数据时,会触发串口中断。再然后,串口中断函数处理,直到接收到指定长度数据,而后关闭中断,进入中断接收回调函数,不再触发接收中断。(只触发一次中断)   参数:   ⮚ UART_HandleTypeDef *huart UART的别名   ⮚ *pData 接收到的数据存放地址   ⮚ Size 接收的字节数   举例: HAL_UART_Receive_IT(&huart1,(uint8_t *)&value,1); //中断接收一个字符,存储到value中   2.2 串口中断函数   串口接收中断回调函数:   功能:   HAL库的中断进行完之后,并不会直接退出,而是会进入中断回调函数中,用户可以在其中设置代码,串口中断接收完成之后,会进入该函数,该函数为空函数,用户需自行修改。   参数:   ⮚ UART_HandleTypeDef *huart UATR的别名   举例: HAL_UART_RxCpltCallback(&huart1){ //用户设定的代码 // }   串口中断处理函数:   功能:   对接收到的数据进行判断和处理,判断是发送中断还是接收中断,然后进行数据的发送和接收,在中断服务函数中使用。   如果接收数据,则会进行接收中断处理函数   如果发送数据,则会进行发送中断处理函数   2.3 串口查询函数   举例:   while(HAL_UART_GetState(&huart4) == HAL_UART_STATE_BUSY_TX) //检测UART发送结束   三、逻辑代码部分   3.1 UART接收中断   因为中断接收函数只能触发一次接收中断,所以我们需要在中断回调函数中再调用一次中断接收函数。   具体流程:   1、初始化串口   2、在main中第一次调用接收中断函数   3、进入接收中断,接收完数据 进入中断回调函数   4、修改HAL_UART_RxCpltCallback中断回调函数,处理接收的数据,   5、回调函数中要调用一次HAL_UART_Receive_IT函数,使得程序可以重新触发接收中断   函数流程:   ①HAL_UART_Receive_IT (中断接收函数) ->   ②USART2_IRQHandler(void) (中断服务函数) ->   ③HAL_UART_IRQHandler(UART_HandleTypeDef *huart) (中断处理函数) ->   ④UART_Receive_IT(UART_HandleTypeDef *huart) (接收函数) ->   ⑤HAL_UART_RxCpltCallback(huart) (中断回调函数)   HAL_UART_RxCpltCallback函数就是用户要重写在main.c里的回调函数。   代码实现:   在main.c中添加下列定义:   在main()主函数中,调用一次接收中断函数   在main.c下方添加中断回调函数   现象:   使用USB转TTL(CH340)进行数据发送,XCOM V2.6串口助手进行调试,发送“1”(这里要注意波特率等参数要设置的和之前配置的相同)   
在这里插入图片描述   在debug模式下,将缓冲计数值UART1_Rx_Cnt加入监视器,串口接收到发来的数据后,计数值+1.   
在这里插入图片描述   同时也可以看到LED灯状态翻转   3.2 UART发送   重新定义printf函数   在 stm32f1xx_hal.c中包含#include <stdio.h>   在 stm32f1xx_hal.c 中重写fget和fput函数   在main.c中添加   现象:   
在这里插入图片描述   注意:   重定义printf后,必须在target里面勾选上MicroLIB,调用一下这个微型库,不然一直卡在里面。   
在这里插入图片描述   参考博文:【STM32】HAL库 STM32CubeMX教程四—UART串口通信详解

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/49272.html

(0)
上一篇 2024年 9月 3日
下一篇 2024年 9月 3日

相关推荐

关注微信