1.串口-printf

使用printf函数向串口发送东西
使用微库,用到了printf,
但是我们发现是不能发送的
因为底层printf是fputc,我们需要自己实现
后面FILE*P不用管,在fputc中调用
第一个参数为uart1的句柄
第二个为要输出的字符
第三个为一次要发送几个字节
第四个为采用轮询,一直死等,就绪

1s发送一次
2.串口接收

使用hal_uart_recevice函数和之前的transmit参数一样
根据data的值不同,我们可以点不同的灯,如果是1的话,翻转一下
GPIO_PIN_10引脚电平
在这之前,需要配置模式,直接给出代码,写很多遍了
c
void MY_INIT(void)
{
__HAL_RCC_GPIOB_CLK_ENABLE();
GPIO_InitTypeDef GPIO_INIT;
GPIO_INIT.Pin=GPIO_PIN_10|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0;
GPIO_INIT.Mode=GPIO_MODE_OUTPUT_PP;
GPIO_INIT.Pull=GPIO_NOPULL;
GPIO_INIT.Speed= GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB,&GPIO_INIT);
}
根据接收数据翻转对应引脚的电平
3.接收字符串
接收字符串的话,我们可以没遇到'\n'就先把他放在buffer中,然后遇到了之后使用printf将buffer发送回去
4.演示

串口接收
5.串口中断
使用轮训方式处理串口的话会一直被阻塞,使用串口中断方式的话,在串口数据没就绪之前都是执行main中的,不会阻塞等待串口
实现中断处理串口,实现第二个串口接收
灯是GPIOB,已经在stm32cubemx中配置过
串口处理函数在stm32f4xx_it.c中
里面是处理串口一的中断处理函数,跳过去看看,
真正的中断处理函数在

可以理解为纯虚函数,必须重写
中断函数实现