栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

STM32

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

STM32

本篇是上一篇的一个plus,也是个人对串口中断接收的一个探索。

STM32_串口接收中断_实现定长数据接收(1)_heqiunong的博客-CSDN博客

上一篇讲到,用串口接收中断来实现串口接收的功能,其中有个要点,就是它是一个字节一个字节的接收的。

而本篇尝试 16个字节 16个字节的接收。用的是同样的方法,代码只需稍微的修改。

同样,还是修改两处代码。

第一处:main.c

  
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_USART1_UART_Init();
  MX_TIM3_Init();
  MX_TIM2_Init();
  
	HAL_TIM_Base_Start_IT(&htim3);
	userinit();
	HAL_UART_Receive_IT(&huart1,value,16);	// ▲ 此处修改 
  

  
  
  while (1)
  {
    

    
		usermain();
  }
  

第二处:"AngelaDecode.c" // 此文件专门用于接收并处理上位机数据, 你可自己定义串口接收源文件a.c b.c,随便你。 你写在main.c里面也可以。 好好看注释就行,我不必多说。

代码中修改的部分,已用注释标明。

#include "usart.h"		
#include "AngelaDecode.h"

unsigned char value[16] = {0x00};	// ▲ value变成了16字节的数组
unsigned char AngelaRx[128]={0x00};
short AngelaRxCNT = 0;

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    int i;
    if(huart->Instance==USART1)	{		
      	// ▲ 此处修改, 一次往AngelaRx数组拷贝16个字节
		for( i = 0; i <  16; i++){
			AngelaRx[AngelaRxCNT+i] = value[i];
		}
		AngelaRxCNT = AngelaRxCNT + 16;
      
		HAL_UART_Receive_IT(&huart1, value, 16);		// ▲ 此处修改
      
		if(AngelaRxCNT==128){	
			AngelaCmdDecode();		
            AngelaRxCNT = 0;	
		}
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/832750.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号