历史上的今天
今天是:2025年01月14日(星期二)
2019年01月14日 | STM32F429(HAL库)_USART串口发送&接收(使用STM32CubeMX)
2019-01-14 来源:eefocus
一、HAL库相关函数
1、串口发送/接收函数
HAL_UART_Transmit();串口轮询模式发送,使用超时管理机制
HAL_UART_Receive();串口轮询模式接收,使用超时管理机制
HAL_UART_Transmit_IT();串口中断模式发送
HAL_UART_Receive_IT();串口中断模式接收
HAL_UART_Transmit_DMA();串口DMA模式发送
HAL_UART_Transmit_DMA();串口DMA模式接收
2、串口中断函数
HAL_UART_TxHalfCpltCallback();一半数据发送完成时调用
HAL_UART_TxCpltCallback();数据完全发送完成后调用
HAL_UART_RxHalfCpltCallback();一般数据接收完成时调用
HAL_UART_RxCpltCallback();数据完全接受完成后调用
HAL_UART_ErrorCallback();传输出现错误时调用
二、程序思路
使用中断控制方式,当I/O操作完成时,输入输出设备控制器通过中断请求线向处理器发出中断信号,处理器收到中断信号之后,转到中断处理程序,对数据传送工作进行相应的处理。
三、工程模板生成
1、打开STM32CubeMX,点击New Project

2、选择单片机对应的参数,这里使用的是STM32F429IGTx,选择后点击OK。

3、创建完成后在左边找到并打开RCC选项卡进行时钟使能,将高数外部时钟(HSE)的时钟源选择为晶体振荡器

4、在窗口上方的选项卡找到Clock Configuration ,进行时钟源的选择与倍频/分频系数的设置

5、由于之前使能了HSE,故在Clock Configuration中可用。这里将PLL时钟源选择为HSE,系统时钟源(SYSCLK)设置为PLLCLK,分频与倍频系数如图

6、返回之前设置RCC的页面(pinout),找到USART1,使能为异步通讯(Asynchronous)

7、此时在Configuration选项卡中可以找到USART1,点击进行进一步的设置

8、点击进入后,在Parameter选项卡中设置波特率(Baud Rate)为115200 Bits/s,字长(Word Length)为 8bits,无奇偶检验(Parity),停止位(Stop Bits)为1,其他选项保持默认。

9、因为该程序使用的是中断处理,所以还需要打开NVIC Settings页面,使能中断

10、设置完毕后点击Apply,再点击OK关闭页面。在窗口左上角的Project选项卡中点击Generate Code 来创建模板

11、分别填入工程名,工程输出目录,所使用的编译器(这里使用MDK5)

12、生成成功

13、点击Open Project打开生成好的模板,在Application/User文件夹下找到main.c。

对工程模板生成方法的介绍到此为止,接下来是对代码的介绍
四、程序编写
1、首先在main函数前定义两个数组变量
uint8_t aTxStartMessages[] = "\r\n******UART commucition using IT******\r\nPlease enter 10 characters:\r\n";
uint8_t aRxBuffer[20];
2、在main函数中添加两个语句通过串口中断发送aTxStartMessage数组的数据和接收数据10个字符,保存在数组aRxBuffer中。
HAL_UART_Transmit_IT(&huart1 ,(uint8_t*)aTxStartMessages,sizeof(aTxStartMessages)); //sizeof()可读取目标长度
HAL_UART_Receive_IT(&huart1,(uint8_t*)aRxBuffer,10);
3、在main.c文件后面添加中断接收完成函数,将接收到的数据又通过串口发送回去。
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
UNUSED(huart);
HAL_UART_Transmit(&huart1,(uint8_t*)aRxBuffer,10,0xFFFF);//(uint8_t*)aRxBuffer为字符串地址,10为字符串长度,0xFFFF为超时时间
}
4、编译后下载至开发板 ,进行复位后通过串口监视器可看到串口发送的aTxStarMessages字符串,向串口发送10个字节的数据后可看到串口将所接收数据又发送回来(注意由于HAL_UART_Receive_IT()函数中的字节参数设置为了10,故只有发送10个字节的字符串才会被串口返回,且由于while循环中无语句,该程序只能执行一次)


史海拾趣
|
保险丝Bussmann KTK-R系列,圆管型快速熔断器KTK-R-5/KTK-R-6/KTK-R-10/KTK-R-12现货 本帖最后由 jameswangsynnex 于 2015-3-3 20:00 编辑 Bussmann KTK-R系列,圆管型快速熔断器KTK-R-5/KTK-R-6/KTK-R-10/KTK-R-12现货 Bussmann KTK-R-15/KTK-R-20/KTK-R-25/KTK-R-30系列价优额定电压:600V AC 电流范围:1/10~30A断流容 ...… 查看全部问答> |
|
无盘客户端的内存和服务器端的磁盘映像文件建立关系,只是它们是怎么对应的,格式是什么,以及怎样不受物理内存大小限制?也就是说客户端内存是如何进行内存管理的,算法和数据结构如何设计?谢谢了。… 查看全部问答> |
|
各个分区出这个东西 不知道是什么病毒 之前是每个盘都出现个autorun.inf的文件夹 我用U盘防火墙删了后就变成这个名字的文件夹 每个盘都出现这个文件.....除了C盘 这东西不能双击 不能删除^很诡异......... 请问有根治方法吗 谢谢 ...… 查看全部问答> |
|
【MSP430共享】智能测试仪器和系统中Modbus协议的实现 Modbus协议适用于主从式终端- 服务器构架的智能仪器,它是一种在工业环境中应用广泛的通信协议。文章基于Mo dbus通信协议研究一种嵌入式数据传输仪表,仪表以MSP430 微处理器为中央控制单元,通过RS - 485 总线和 GPRS技术,能实现信号和数据的输入输出 ...… 查看全部问答> |
|
/******************************设计者:李文*功能:共阴的数码管显示0-f**********************************/ #include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;uchar code table[]={ ...… 查看全部问答> |
|
以前都是玩51和AVR,430的低功耗一直是传说, 参与了最近团购的LaunchPad,到手测试后,对430的低功耗赞不绝口 430对于电池供电的系统真是个福音啊。 无奈LaunchPad的资源太少, 已经入手了USB仿真器 和147芯片,准备打板测试。 期待和大家分 ...… 查看全部问答> |




