一、准备工作:
有关CUBEMX的初始化配置,参见我的另一篇blog:【STM32+HAL】CUBEMX初始化配置
二、所用工具:
1、芯片:STM32F103C8T6
2、CUBEMX配置软件
3、蓝牙串口模块JDY-31
三、实现功能:
实现手机和电脑端串口蓝牙通信
四、HAL配置步骤:
1、打开串口一和电脑通信(115200bit/s),串口二和手机蓝牙连接(9600bit/s)
2、使能中断
至此,CUBEMX配置完毕
五、KEIL填写代码:
1、串口初始化
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer1, 1);
HAL_UART_Receive_IT(&huart2, (uint8_t *)&aRxBuffer2, 1); //串口接收初始化
2、数据接收函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
UNUSED(huart);
if(huart==&huart1){
if(Uart1_Rx_Cnt >= 255) {
Uart1_Rx_Cnt = 0;
memset(RxBuffer1,0x00,sizeof(RxBuffer1));
HAL_UART_Transmit(&huart1, (uint8_t *)"OVERFLOW!\r\n", 10,0xFFFF);
}
else{
RxBuffer1[Uart1_Rx_Cnt++] = aRxBuffer1;
if((RxBuffer1[Uart1_Rx_Cnt-1] == 0x0A)&&(RxBuffer1[Uart1_Rx_Cnt-2] == 0x0D)) {
strcpy(rx_buf1,RxBuffer1);
rx1=atoi(rx_buf1);
printf("%s",rx_buf1);
while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX);
Uart1_Rx_Cnt = 0;
memset(RxBuffer1,0x00,sizeof(RxBuffer1));
}
}
HAL_UART_Receive_IT(&huart1, (uint8_t *)&aRxBuffer1, 1);
}
if(huart==&huart2){
if(Uart2_Rx_Cnt >= 255) {
Uart2_Rx_Cnt = 0;
memset(RxBuffer2,0x00,sizeof(RxBuffer2));
HAL_UART_Transmit(&huart2, (uint8_t *)"OVERFLOW!\r\n", 10,0xFFFF);
}
else{
RxBuffer2[Uart2_Rx_Cnt++] = aRxBuffer2;
// if((RxBuffer2[Uart2_Rx_Cnt-1] == 0x0A)&&(RxBuffer2[Uart2_Rx_Cnt-2] == 0x0D)) {
strcpy(rx_buf2,RxBuffer2);
rx2=atoi(rx_buf2);
printf("%s",rx_buf2);
while(HAL_UART_GetState(&huart2) == HAL_UART_STATE_BUSY_TX);
Uart2_Rx_Cnt = 0;
memset(RxBuffer2,0x00,sizeof(RxBuffer2));
// }
}
HAL_UART_Receive_IT(&huart2, (uint8_t *)&aRxBuffer2, 1);
}
}
3、控制灯闪烁
/* USER CODE BEGIN WHILE */
while (1)
{
if(rx1 == 1||rx2 == 1) HAL_GPIO_TogglePin(GPIOC,LED_Pin);
HAL_Delay(200);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}