1STM32CobeMX设置
设置时钟源
rcc设置为外部时钟High Speed Clock (HSE)//设置为如图
再将其设置为72MHz
设置串口引脚为异步通信
设置波特率等
设置波特率范围提示点击波特率再点击图中的
我的设置
再打开中断
即可生成代码//省略项目设置
2代码设置
函数
HAL_UART_Transmit() - 发送数据到串口。
HAL_UART_Receive() - 从串口接收数据。
解释
HAL_UART_Transmit() - 发送数据到串口。
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
huart
: 指向UART_HandleTypeDef
结构的指针,该结构包含了 UART 的配置信息。pData
: 指向要发送的数据缓冲区的指针。Size
: 要发送的数据的字节数。Timeout
: 发送操作的超时时间(以毫秒为单位)。如果设置为HAL_MAX_DELAY
,则表示无限期等待。- 返回值: 函数执行状态(
HAL_OK
表示成功,HAL_ERROR
表示错误,HAL_BUSY
表示忙,HAL_TIMEOUT
表示超时)。
HAL_UART_Receive() - 从串口接收数据。
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
huart
: 指向UART_HandleTypeDef
结构的指针,该结构包含了 UART 的配置信息。pData
: 指向用于接收数据的缓冲区的指针。Size
: 要接收的数据的字节数。Timeout
: 接收操作的超时时间(以毫秒为单位)。如果设置为HAL_MAX_DELAY
,则表示无限期等待。- 返回值: 函数执行状态(
HAL_OK
表示成功,HAL_ERROR
表示错误,HAL_BUSY
表示忙,HAL_TIMEOUT
表示超时)。
这些函数在发送或接收数据时会阻塞,直到操作完成或发生超时。因此,在调用这些函数时,应该确保 UART 已经正确初始化,并且 pData
和 Size
参数指定了正确的数据缓冲区和大小。超时参数 Timeout
可以用来避免在通信问题导致数据无法发送或接收时无限期地等待。
当您使用 HAL_UART_Transmit()
和 HAL_UART_Receive()
函数时,您不需要手动检测是否有数据写入或读取,因为这些函数会自动处理数据的发送和接收。
实例解释
发送数据实例:
#include "stm32f1xx_hal.h"
UART_HandleTypeDef huart; // 假设这是您的UART句柄
int main(void)
{
HAL_Init(); // 初始化HAL库
SystemClock_Config(); // 配置系统时钟
MX_USART2_UART_Init(); // 初始化UART
uint8_t txData[] = "Hello, World!"; // 要发送的数据
uint16_t size = sizeof(txData) - 1; // 发送数据的大小(减1是为了排除字符串末尾的'\0')
// 发送数据
if (HAL_UART_Transmit(&huart, txData, size, HAL_MAX_DELAY) != HAL_OK)
{
// 发送失败的处理
Error_Handler();
}
// ... 其他代码 ...
while (1)
{
// 主循环
}
}
接收数据实例:
#include "stm32f1xx_hal.h"
UART_HandleTypeDef huart; // 假设这是您的UART句柄
int main(void)
{
HAL_Init(); // 初始化HAL库
SystemClock_Config(); // 配置系统时钟
MX_USART2_UART_Init(); // 初始化UART
uint8_t rxData[32]; // 接收数据的缓冲区
uint16_t size = sizeof(rxData); // 接收缓冲区的大小
// 接收数据
if (HAL_UART_Receive(&huart, rxData, size, 5000) != HAL_OK)
{
// 接收失败的处理
Error_Handler();
}
// 处理接收到的数据
// ...
while (1)
{
// 主循环
}
}
用proteus8 实现串口
使用虚拟串口连接
stm32设置
里面的时钟值为stm32最终输出的值下图的值
串口图
串口设置
总结
HAL_UART_Transmit() - 发送数据到串口。
HAL_UART_Receive() - 从串口接收数据。
此函数会一直消耗系统内核资源,处于一直检测状态
使用sizeof();计算数组个数
调用的数组为指针类型//改变类型时记得转换
Proteus 8的stm32的时钟源为最终分频倍频之后的频率