自定义UART数据格式

uart作用

  1. CPU与CPU之间通讯

  2. 外设和CPU之间通讯

数据格式: 起始位 + 数据位 + 校验位 + 结束位

起始位数据为1数据位2校验位停止位
aa01/02/03/0400/01数据位1+数据位2ff

列如:

  • LED1点亮 aa 01 01 02 ff
  • LED2点亮 aa 02 01 03 ff
  • LED2点亮 aa 03 01 04 ff
  • LED2熄灭 aa 03 01 04 ff
void control_LED(unsigned int led_number, unsigned int status)
{
	GPIO_WriteBit(GPIOA, (uint16_t)1<<led_number, (BitAction)status);
}

void USART1_IRQHandler(void)
{
	static unsigned int i = 1; // 数组下标
	static unsigned int flag = 0; // 标志位表示有没有开始
	
	static unsigned int arr[5] = {0, 0, 0, 0, 0}; //只在第一次调用初始化,放在全局
	
	unsigned char ch;
	while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == SET)
	{
		ch = USART_ReceiveData(USART1);
		if(ch == 0xaa)
		{
			arr[0] = ch;
			flag = 1;
		}
		if(ch != 0xaa && flag == 1)
		{
			arr[i++] = ch;
			
			if(i == 5)
			{
				flag = 0;
				i = 1;
				if(((arr[i]+arr[2]) == arr[3]) && arr[4] == 0xff)
					control_LED(arr[1], arr[2]);
			}
		}
	}			
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值