HAL_UART_Transmit()
HAL_UART_Receive()
HAL_UART_Transmit_IT()
HAL_UART_Receive_IT()
特点:不占CPU资源
简介:
发送函数:HAL_UART_Transmit_DMA()
接收函数:HAL_UART_Receive_DMA()
CubeMX配置
以
HAL_UART_Transmit_IT
为例
考虑到初始化代码可以用CubeMX生成,为方便理解,省略了初始化代码
int main(void)
{
/*初始化(已省略)*/
uint8_t uartbuff[20] = "test uart";
while (1)
{
HAL_UART_Transmit(&huart1,uartbuff,20,10);
}
}
#include "stdio.h"
int fputc(int c,FILE * f)
{
HAL_UART_Transmit(&huart1,(uint8_t *)&c,1,20);// 此处以阻塞发送为例,也可以使用其他两种方式
return c;
}
int fgetc(FILE *f)
{
uint8_t ch = 0;
HAL_UART_Receive(&huart1, &ch, 1, 0xffff);// 此处以阻塞接收为例,也可以使用其他两种方式
return ch;
}
完成重定义后,就可以在代码中使用printf()和scanf()了,使用方法同寻常c语言编程相同,输入和输出通过串口实现,可以使用串口调试助手进行查看和操作。
分析一下main.c文件,从头往下看,为方便阅读,删去了CubeMX生成的注释
#include "main.h"
#include "dma.h"
#include "usart.h"
#include "gpio.h"
#include "stdio.h"
void SystemClock_Config(void);
/*此处重定义fputc和fgetc*/
int fputc(int c,FILE * f)
{
HAL_UART_Transmit(&huart1,(uint8_t *)&c,1,20);
return c;
}
int fgetc(FILE *f)
{
uint8_t ch = 0;
HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
return ch;
}
int main(void)
{
/****************这部分代码可以使用CubeMX生成******************************/
/* 复位所有外设,初始化Flash接口和Systick */
HAL_Init();
/* 配置系统时钟 */
SystemClock_Config();
/* 初始化所有已配置的外设,可以看到这里使用的是MX_XX_Init(),也就是调用使用CubeMX配置生成的初始化设置 */
MX_GPIO_Init();
MX_DMA_Init();
MX_USART1_UART_Init();
/****************这部分代码可以使用CubeMX生成******************************/
/* 进入while循环,执行用户逻辑 */
while (1)
{
printf("test uart\n");
}
}
UART的中断收发和DMA收发提供了回调函数,当达到相应的条件后,会触发回调函数,用户可以在回调函数中编写自己需要实现的功能
例如:当使用HAL_UART_Transmit_IT()
完成发送后,会触发HAL_UART_TxCpltCallback
回调函数,用户可以在HAL_UART_TxCpltCallback
中编写代码实现自己需要的功能。
值得注意的是,回调函数是使用弱定义关键字weak
实现的,用户需要重定义实现回调函数。
__weak void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{
/* Prevent unused argument(s) compilation warning */
UNUSED(huart);
/* NOTE: This function should not be modified, when the callback is needed,
the HAL_UART_TxCpltCallback could be implemented in the user file
*/
}
常见回调函数:
HAL_UART_TxCpltCallback
HAL_UART_RxCpltCallback
HAL_UART_TxHalfCpltCallback
HAL_UART_RxHalfCpltCallback
HAL_UART_ErrorCallback
更多高级操作请查阅HAL库官方文档
或阅读stm32f1xx_hal_uart.c中的相关介绍
一、正则表达式概述 二、正则表达式在VBScript中的应用 三、正则表达式在VavaScr...
计算属性computed: 支持缓存,只有依赖数据发生改变,才会重新进行计算 不支持...
vbs:把一段文字中指定字符颜色变成红色的正则 functionc(Tstr,Word) Dimre Setre...
前言 相信大家都知道在IDE中代码的智能提示几乎都是标配,虽然一些文本编辑器也...
本文将研究 ES6 的 for ... of 循环。 旧方法 在过去,有两种方法可以遍历 javas...
歌词编辑器 歌词编辑器 第一步:选择要播放的歌曲并播放 第二步:填写全部的歌词...
【排序算法】之lowb三人组冒泡、插入、选择 什么是lowb三人组 冒泡排序bubble so...
微信文件传输助手是微信电脑版与手机微信之间相互传输图片等文件的好工具,但很...
ADO对象: Connection Command Recordset Record Stream ASP支持的对象很多,可...
一石激起千层浪,继中国区浩浩荡荡的大裁员告一段落之后,甲骨文并未因此收起手...