STM32学习——串口实验(非中断)

本文介绍了STM32使用HAL库进行串口通信的函数,包括HAL_UART_Transmit()的阻塞发送,HAL_UART_Receive_IT()的中断接收方式,以及中断回调函数的使用。同时提到了串口接收中断的流程和状态标记变量USART_RX_STA的管理,以及一个简单的串口实验示例,展示了如何接收并回显串口工具发送的字符串。
摘要由CSDN通过智能技术生成

常用函数介绍

串口发送/接收函数:

  • HAL_UART_Transmit(); 串口发送数据,使用超时管理机制
  • HAL_UART_Receive(); 串口接收数据,使用超时管理机制
  • HAL_UART_Transmit_IT(); 串口中断模式发送  
  • HAL_UART_Receive_IT(); 串口中断模式接收

HAL_StatusTypeDef HAL_UART_Transmit ( UART_HandleTypeDef *huart , uint8_t * pData , uint16_t Size , uint32_t Timeout )
作用:以阻塞的方式发送指定字节的数据
  • 形参 1 UART_HandleTypeDef 结构体类型指针变量
  • 形参 2:指向要发送的数据地址
  • 形参 3:要发送的数据大小,以字节为单位
  • 形参 4:设置的超时时间,以ms单位

HAL_StatusTypeDef HAL_UART_Receive_IT ( UART_HandleTypeDef * huart , uint8_t * pData , uint16_t Size )
作用:以中断的方式接收指定字节的数据
  • 形参 1 UART_HandleTypeDef 结构体类型指针变量
  • 形参 2 是指向接收数据缓冲区
  • 形参 3 是要接收的数据大小,以字节为单位
此函数执行完后将清除中断,需要再次调用以重新开启中断。

串口中断回调函数:

  • HAL_UART_IRQHandler(UART_HandleTypeDef *huart); //串口中断处理函数
  • HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart); //发送中断回调函数
  • HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart); //接收中断回调函数

状态标记变量:

USART_RX_STA
0 开始,串口中断接收到一个数据(一个字节)就自增 1 。当数据读取全部 OK 时候(回车和换行
符号来的时候),那么 USART_RX_STA 的最高位置 1 ,表示串口数据接收全部完毕了,然后 main
函数里面可以处理数据了。

串口接收中断流程 

串口实验(非中断)

需求:
接受串口工具发送的字符串,并将其发送回串口工具。
硬件接线:
TX -- A10
RX -- A9
一定要记得交叉接线!!

串口配置:

1. 选定串口

2. 选择模式

异步通讯

3. 串口配置

 4. 使用MicroLIB

 从魔术棒打开,这个勾勾一定要打上,否则 printf 无法重映射!

5. 代码实现: 

#include <stdio.h>
#include <string.h>

unsigned char cmd[32] = {0};

int fputc(int cmd,FILE *f)
{
	unsigned char tmp[1] = {cmd};
	HAL_UART_Transmit(&huart1,tmp,1,0xffff);
	return cmd;
}

main函数里:

unsigned char cmd[32] = {0};
HAL_UART_Transmit(&huart1,"hello world\n",sizeof("hello world\n"),100);

while (1)
{
    HAL_UART_Receive(&huart1,cmd,20,100);
    //HAL_UART_Transmit(&huart1,cmd,sizeof(cmd),100);
    printf(cmd);
    memset(cmd,'\0',sizeof(cmd));
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值