STM32F405RG HAL库UART串口接收信息

接收口要用上拉输入

2.中断接收,配置完中断函数void USART1_IRQHandler(void)

找回调函数HAL_UART_IRQHandler(&huart1);CTRL+点击进入。

在下面找到HAL_UART_RxCpltCallback复制到主函数。

	  if(Serial_GetRxFlag() == 1){
		  Serial_SendByte(ByteRecv);
		  OLED_ShowHexNum(1,8,ByteRecv,2);
	  }
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
uint8_t Serial_GetRxFlag(void);
uint8_t Serial_RxFlag;
uint8_t ByteRecv;
uint8_t Serial_GetRxFlag(void)
{
	if (Serial_RxFlag == 1)			//如果标志位为1
	{
		Serial_RxFlag = 0;
		return 1;					//则返回1,并自动清零标志位
	}
	return 0;						//如果标志位为0,则返回0
}
uint8_t Serial_GetRxData(void)
{
	return ByteRecv;			//返回接收的数据变量
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	if(huart == &huart1){
		Serial_RxFlag = 1;//已接受标志位
		HAL_UART_Receive_IT(&huart1,&ByteRecv,1);//再次打开接收中断微瑕疵做准备
	}
}

参考这个视频【STM32F4+CubeMX零基础快速入门】串口收发全攻略_哔哩哔哩_bilibili

定义一个变量

uint8_t buffer[5];

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	HAL_UART_Transmit_IT(&huart1,&ByteRecv,3);
	HAL_UART_Receive_IT(&huart1,&ByteRecv,3);
}

while循环前加一个

  HAL_UART_Receive_IT(&huart1,&ByteRecv,3);

使用中断每个字节都进入中断,DMA是不需要的,只需要CPU告诉存放的位置就可以搬运数据。

DMA后面还有空闲中断,对不定长数据进行响应。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值