2021-04-04STM32G071串口编程

STM32 串口编程

1.基本概念

  1. USART/ UART (同步/异步)收发器
    收发两个设备间需要同步发送时钟,叫同步收发器。
    接收设备的频率能自动匹配发送设备的频率,叫异步收发器。
    一般都用异步收发器

1.串口配置

    串口配置使用STM32CubeIDE工具进行自动配置。配置的内容包括基本配置和高级配置

基本配置:

1.波特率 Baud Rate
2.字节长度 Word Length
3.极性 Parity
4.停止位 Stop Bits
使用默认参数即可,也可以更改成你需要的参数。
需要注意两个串口之间通讯,这些基本配置必须一致,才能正常通讯。
异步串行数据的一般格式是:起始位+数据位+停止位,其中起始位1 位,数据位可以是5、6、7、8位,停止位可以是1、1.5、2位。
在这里插入图片描述
串口空闲时是高电平,开始位把电平拉低一个时钟。停止位是高电平。
极性位是指校验位,是奇校验还是偶校验,默认情况是无校验。

高级配置

过采样 :采用16次过采样应该是能更好的防误判,抗干扰。

2.串口编程

结构体

	串口的结构体是 **UART_HandleTypeDef**,在该机构体中,又包含

Instance : 存放串口寄存器的数值。

串口发送

HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
函数参数中要指名是哪个串口,发送的字符串指针和发送的长度。
串口中断发送的函数。发送完成后,会发送串口中断,直接进入回调函数TxCpltCallback()。
串口发送时要注意两次发送不能离得太近,否则函数会自动退出,返回“HAL_BUSY”,如果是这样,记得下次轮回的时候再发送一遍。
串口发送还要注意串口没有发送完毕之前,不要使用串口发送的字符串数组,否则会莫名的改变发送的内容。

3. STM32特殊功能

1.串口FIFO

HAL 串口编程

宏定义

  • 复位 UART handle的gstate和RxState __HAL_UART_RESET_HANDLE_STATE(HANDLE)
  • 刷新DR寄存器 __HAL_UART_FLUSH_DRREGISTER(HANDLE)
  • 检查FLAG标志(SR寄存器) __HAL_UART_GET_FLAG(HANDLE, FLAG)
  • 清楚FLAG标志位(SR寄存器) __HAL_UART_CLEAR_FLAG(HANDLE, FLAG)
  • 清除UART PE挂起标志 __HAL_UART_CLEAR_PEFLAG(HANDLE)
  • 清除FE挂起标志(实际跟上一个是一样的) __HAL_UART_CLEAR_FEFLAG(HANDLE
  • 清除NE挂起标志(跟上一个也是一样的) __HAL_UART_CLEAR_NEFLAG(HANDLE)
  • 清除接收溢出标志(还是一样的) __HAL_UART_CLEAR_OREFLAG(HANDLE)
  • 清除IDEL标志(还是一样) __HAL_UART_CLEAR_IDLEFLAG(HANDLE)
  • 中断使能 __HAL_UART_ENABLE_IT(HANDLE, INTERRUPT)
  • 中断禁止 __HAL_UART_DISABLE_IT(HANDLE, INTERRUPT)
  • 查看中断使能位 __HAL_UART_GET_IT_SOURCE(HANDLE, IT)
  • 使能CTS流 __HAL_UART_HWCONTROL_CTS_ENABLE(HANDLE)
  • 禁止CTS流 __HAL_UART_HWCONTROL_CTS_DISABLE(HANDLE)
  • 使能RTS串口流引脚 __HAL_UART_HWCONTROL_RTS_ENABLE(HANDLE)
  • 禁止RTS串口流引脚 __HAL_UART_HWCONTROL_RTS_DISABLE(HANDLE)
  • 使能一位取样模式 __HAL_UART_ONE_BIT_SAMPLE_ENABLE(HANDLE)
  • 禁止一位取样模式 __HAL_UART_ONE_BIT_SAMPLE_DISABLE(HANDLE)
  • 使能串口 __HAL_UART_ENABLE(HANDLE)
  • 禁止串口 __HAL_UART_DISABLE(HANDLE)

函数

  • 接收一帧中断 HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen, uint32_t Timeout)

参考资料

STM32HAL库使用详解 https://blog.csdn.net/limint86/article/details/107356472/
dma串口发送数据后一直显示HAL_UART_STATE_BUSY_TX https://blog.csdn.net/m0_57145940/article/details/125485352

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值