HAL库串口接收不定长字符串(CubeMX,不用DMA)

新建工程
在这里插入图片描述
选择芯片,点start project
在这里插入图片描述
PA10是串口一的rx
PA9是串口一的tx
配上IO
在这里插入图片描述
RCC这边,选择使用外部晶振
在这里插入图片描述
配时钟树
在这里插入图片描述
project manager里面,设置项目名字,路径和编译器
在这里插入图片描述
选上给每个外设都建立独立的c文件
在这里插入图片描述
回到pinout界面,设置波特率
上面的mode一定一定一定要选A开头的那个,异步,uart。usart只能往串口助手发消息,但是收不到串口助手发来的消息。
在这里插入图片描述

开中断
在这里插入图片描述
generate code,打开文件
在uart.h里面添加#include “stdio.h”

在usart.c下添加printf重定向

int fputc(int ch, FILE *f)
{
  HAL_USART_Transmit(&husart1, (uint8_t *)&ch, 1, 0xffff);
  return ch;
}

main函数的while里面加上这一段来测试

	printf("hello\r\n");
	HAL_Delay(500);

效果正常
在这里插入图片描述
接下来是正题,接收不定长字符串(假设字符串是以/r/n结束)
发生中断时,会执行void USART1_IRQHandler(void)
在这里插入图片描述
该函数调用HAL_USART_IRQHandler(&husart1);
在这里插入图片描述
该函数是判断是不是接收完成中断,如果是的话,调用USART_Receive_IT()
在这里插入图片描述
尝试了这个教程,无果
考虑基于定时器的改动
用定时器三
定时器操作方法
操作失败
有个小tip,在c文件定义变量,然后在对应的h文件中extern

考虑基于字符串回显的代码,来进行改动
参照这篇博客设置,一切正常

然后打开cubemx工程,把串口三配上,因为串口三连着传感器
串口三是PB10和PB11

使用HAL_UART_Receive_IT(&huart1,&aRxBuffer,1); 等待读取第一个返回数
读到后,会调用HAL_UART_RxCpltCallback
里面HAL_UART_Transmit(&huart1,&aRxBuffer,1,0xFFFF);将读到的数通过串口一发到电脑上

改动:
使用HAL_UART_Transmit(&huart3,“AT+SPO2\r\n”,9,0xFFFF);用串口三给模块发数
在while循环中
使用HAL_UART_Receive_IT(&huart3,&aRxBuffer,1); 等待串口三读取第一个返回数
读到后,会调用HAL_UART_RxCpltCallback
里面HAL_UART_Transmit(&huart1,&aRxBuffer,1,0xFFFF);将读到的数通过串口一发到电脑上

还是不行
考虑先看看寄存器版的串口
这个地方要用数组,直接上字符串,不识别转义字符
在这里插入图片描述

调出来了
在这里插入图片描述
心率调完
在这里插入图片描述

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值