- 编写呼吸灯
- 串口发送ON开LED,发送OFF关LED或者(0X550X440XFF表示开灯,0X550X660XFF表示关灯)注:包头 0X55 包尾:0XFF 数据:0X44表示开灯 0X66表示关灯
用到了重定向
//printf的重定向
int fputc(int ch,FILE *f)
{
while(!(USART1->ISR & 1<<7)){}
//判断发送数据寄存器是不是空了
USART1->TDR=ch;
//将数据写入到TDR寄存器中
}
//scanf的重定向
int fgetc(FILE *f)
{
uint8_t ch;
while(!(USART1->ISR & 1<<5)){}
//判断接受数据寄存器是不是空了
ch=USART1->RDR;
//将数据从RDR寄存器中读出来
return ch;
}
*************************************************************8
scanf("%s",buf);
printf("%s",buf);
代码:
void ledOn(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
printf("LED ON\n");
}
void ledOff(void)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
printf("LED OFF\n");
}
void ledHuu(void)
{
printf("LED 呼吸\n");
for(int i = 0; i < 3; i++)
{
for(int i = 2000; i > 0; i--)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
delay(i);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
delay(2000-i);
}
for(int i = 0; i < 2000; i++)
{
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
delay(2000-i);
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
delay(i);
}
}
}
void recvProcess(void)
{
if(buf[0] == 0x55 && buf[2] == 0xFF)
{
if(buf[1] == 0x44)
ledOn();
else if(buf[1] == 0x66)
ledOff();
else if(buf[1] == 0xaa)
ledHuu();
}
else if(buf[0] == 'O')
{
if(buf[1] == 'N')
ledOn();
else if(buf[1] == 'F')
ledOff();
}
else if(buf[0] == 'H')
ledHuu();
memset(buf, 0, sizeof(buf));
}
接收端: