参考博客
欲实现功能
手机发送数字0,1来控制板子上LED0,1,的翻转。
1.接收和发送数据
配置串口,并开启DMA。
开启DMA,注意添加宏定义和变量声明。
/* USER CODE BEGIN USART2_Init 2 */
__HAL_UART_ENABLE_IT(&huart2,UART_IT_IDLE); //开启空闲中断
HAL_UART_Receive_DMA(&huart2,RxBuffer,RXBUFFER_LEN); //开启DMA的接收
/* USER CODE END USART2_Init 2 */
重写printf函数。
int fputc(int c,FILE *stream)
{
uint8_t ch[1]={c};
HAL_UART_Transmit(&huart2,ch,1,0xFFFF);
return c;
}
printf("this is a test\n");
可以在手机上看到this is a test,表明电脑数据发送成功。
数据的发送,蓝牙发送的数据显示在电脑上是ASCII码的形式。
例如我手机发送一个 1,在监视窗口显示的就是49。
在配置完成LED0,LED1的相关配置后,写了一个翻转LED的函数,根据手机发送数据的不同,作为一个判断条件,进而执行相应的函数。
void Check_Rx()
{
if(RX_flag == 1) //判断是否接收完成
{
printf("Rx_len = %d\n",Rx_len);
printf("I got the message %s",RxBuffer);
// for(uint8_t i=0;i<Rx_len;i++) //清除接收的标志
// {
// RxBuffer[i] = 0;
// }
Rx_len=0;
RX_flag = 0;
}
}
void LED_toggle(void)
{
if(RX_flag == 1) //判断是否接收完成
{
if(RxBuffer[0]==48)
{
HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_5);
}
else if(RxBuffer[0]==49)
{
HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5);
}
}
}
2.现象展示
实现灯的翻转。