uart作用
-
CPU与CPU之间通讯
-
外设和CPU之间通讯
数据格式: 起始位 + 数据位 + 校验位 + 结束位
起始位 | 数据为1 | 数据位2 | 校验位 | 停止位 |
---|---|---|---|---|
aa | 01/02/03/04 | 00/01 | 数据位1+数据位2 | ff |
列如:
- 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]);
}
}
}
}