友善串口工具接收数据随机换行_STM32CubeMX_Exp3_串口_主动发送中断接收__简明指导文件__jyb...

Exp3_USART1_Transmit_VariableLengthReceive_IT__简明指导文件

编程实现主动发送中断接收,变长度串行通信

9ae4537d29bf1fd7c2832933d18adfbb.png

配置串口参数

5c54811c6c983468ec91bde6a74066aa.png

配置串口中断

26bad9841aced38093d40f0240298045.png

设置中断优先级

906d5e8fc246c2fd7bb3755dd042fca3.png

配置LED指示灯

在固定位置添加程序:

/* USER CODE BEGIN PV */

__IO ITStatus Uart1_Ready_R = RESET;

uint8_t aRxBuffer[1]; //aRxBuffer必须定义为数组

uint8_t RxBuffer[100];

uint8_t Rx_count_UART1=0;

uint8_t Rx_Num_UART1=0;

/* USER CODE END PV */

/* USER CODE BEGIN WHILE */

HAL_UART_Receive_IT(&huart1,aRxBuffer,1); //启动中断方式接收

while (1)

{

/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */

while(Uart1_Ready_R==RESET); //等待一帧数据接收完毕

Uart1_Ready_R=RESET; //将接收标志复位

HAL_UART_Transmit(&huart1,RxBuffer,Rx_Num_UART1,10); //发送数据

HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);

HAL_Delay(10);

}

/* USER CODE END 3 */

/* USER CODE BEGIN 4 */

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)

{

if(UartHandle->Instance == USART1) //首先判断是否是USART1的中断

{

RxBuffer[Rx_count_UART1] = aRxBuffer[0]; //保存接收到的数据

//判断是否已经接收到回车(0x0D)和换行(0x0a)

if((RxBuffer[Rx_count_UART1-1] == 0x0D)&&(RxBuffer[Rx_count_UART1] == 0x0A))

{

//将接收置为SET(=1),以回车换行为结束标志的一帧数据接收完毕

Uart1_Ready_R = SET;

Rx_Num_UART1 = ++Rx_count_UART1; //统计接收到的数据个数

Rx_count_UART1 = 0; //接收数据计数器清零

}

else Rx_count_UART1++; //如果还没有到回车换行,则接收数据计数器+1

HAL_UART_Receive_IT(&huart1,aRxBuffer,1); //启动下一次接收

}

}

/* USER CODE END 4 */

运行结果:

171a4c5f38fc04e9aa311f2d4e3774de.png

运行结果

计算机每发送一次数据给STM32F107,接收到数据后,将接收到的数据发送给计算机,LED改变一次亮灭状态。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值