完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
前言:
通过STM32Cube建立工程,实现配置USART2和USART3,以及中断配置。最终实现STM32开发板通过BT05与手机互发数据 用到工具: 1.STM32F103ZET6开发板 2.STM32Cube软件 3.MDK-keil 5 4.STM32F1XX HAL库 5.蓝牙模块BT05 知识点: 1.通过STM32Cube创建例程 2.HAL库中的串口配置,优先级配置,中断配置 3.重定义printf函数 4.在中断里 接收USART2串口发来的数据,并通过USART3发走 在中断里 接收USART3串口发来的数据,并通过USART2发走 硬件连接 BT05的RXD连接到开发板上的 USART2 上的TX口–PA2 BT05的TXD连接到开发板上的 USART2 上的RX口–PA3 BT05的GND连接到开发板上的 GND BT05的VCC连接到开发板上的 VCC–5V USB转TTL线,一头连接电脑,另外一头连接 USART3 上的TX口–PB10,RX口–PB11 工程创建: 1.打开STM32Cube 2.双击你选择的芯片封装后,出现如下界面,现在开始建立工程: 2.1设置系统时钟,串口USART2 USART3 2.2点击 GENERATE CODE 马上生成工程。 3.编辑代码 3.1 在usart.c中新增重定向printf的函数 /* USER CODE BEGIN 1 */ /*将串口3连接到电脑上,所以将串口3的printf重映射一下*/ int fputc(int ch,FILE *f) { HAL_UART_Transmit(&huart3,(uint8_t *)&ch,1,0xFFFF); return ch; } /*接收串口2的内容,这里暂时用不到*/ int fgetc(FILE *f) { uint8_t ch = 0; HAL_UART_Receive(&huart2,&ch,1,0xFFFF); return ch; } /* USER CODE END 1 */ 3.2 在main.c中重新编写串口中断回调函数 /* USER CODE BEGIN Includes */ #include /* USER CODE END Includes */ /* USER CODE BEGIN PD */ #define RXBUFFERSIZE 256 char RxBuffer[RXBUFFERSIZE]; char RxBuffer_2[RXBUFFERSIZE]; uint8_t aRxBuffer; uint8_t aRxBuffer_2; uint8_t Uart2_Rx_Cnt = 0; uint8_t Uart3_Rx_Cnt = 0; /* USER CODE END PD */ main函数中新增如下内容(while(1)前) /* USER CODE BEGIN 2 */ HAL_UART_Receive_IT(&huart2,(uint8_t *)&aRxBuffer,1); HAL_UART_Receive_IT(&huart3,(uint8_t *)&aRxBuffer_2,1); /* USER CODE END 2 */ 1 2 3 main函数外重新编写中断回调函数 /* USER CODE BEGIN 4 */ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { UNUSED(huart); if(huart->Instance == USART2) { if(Uart2_Rx_Cnt > 255) { Uart2_Rx_Cnt = 0; memset(RxBuffer,0x00,sizeof(RxBuffer)); HAL_UART_Transmit(&huart2,(uint8_t *)"outof range",12,0xffff); } else { RxBuffer[Uart2_Rx_Cnt++] = aRxBuffer; if((RxBuffer[Uart2_Rx_Cnt-1] == 0x0A)&&(RxBuffer[Uart2_Rx_Cnt-2] == 0x0D)) { HAL_UART_Transmit(&huart3, (uint8_t *)&RxBuffer, Uart2_Rx_Cnt,0xFFFF); // while(HAL_UART_GetState(&huart3) == HAL_UART_STATE_BUSY_TX);// Uart2_Rx_Cnt = 0; memset(RxBuffer,0x00,sizeof(RxBuffer)); // } } HAL_UART_Receive_IT(&huart2, (uint8_t *)&aRxBuffer, 1); } if(huart->Instance == USART3) { if(Uart3_Rx_Cnt > 255) { Uart3_Rx_Cnt = 0; memset(RxBuffer_2,0x00,sizeof(RxBuffer_2)); HAL_UART_Transmit(&huart3,(uint8_t *)"outof range",12,0xffff); } else { RxBuffer_2[Uart3_Rx_Cnt++] = aRxBuffer_2; if((RxBuffer_2[Uart3_Rx_Cnt-1] == 0x0A)&&(RxBuffer_2[Uart3_Rx_Cnt-2] == 0x0D)) { HAL_UART_Transmit(&huart2, (uint8_t *)&RxBuffer_2, Uart3_Rx_Cnt,0xFFFF); //?????????? while(HAL_UART_GetState(&huart2) == HAL_UART_STATE_BUSY_TX);//??UART???? Uart3_Rx_Cnt = 0; memset(RxBuffer_2,0x00,sizeof(RxBuffer_2)); //???? } } HAL_UART_Receive_IT(&huart3, (uint8_t *)&aRxBuffer_2, 1); //??????? } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1383 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1375 浏览 1 评论
798 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
573 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1414 浏览 2 评论
1763浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
495浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
431浏览 3评论
418浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
396浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-2 12:12 , Processed in 0.802101 second(s), Total 76, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号