完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1.蓝牙模块
这里用的是HC-08,一款低功耗蓝牙。 2.AT指令调试 HC-08的AT指令需要在未连线的情况下进行,我们需要一个USB转TTL串口与HC-08连接,注意将HC-08的TX连接至CH340的RX(HC-08为3.3V供电)。成功后可以看到蓝牙模块上的蓝灯闪烁。 用串口调试软件发送指令。指令集如下。 3.串口配置 测试蓝牙模块没有问题之后,将单片机与HC-08连接,我这里使用的是USART3。然后进行串口配置。 /*----------------------------------------------------------------------------------------------------- **函数名:uart_init() **返回值:无 **功能:串口配置函数 * *----------------------------------------------------------------------------------------------------*/ void uart_init() { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; //10MHz GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; //PB11 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; //10MHz GPIO_Init(GPIOB,&GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 9600; //波特率9600 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //硬件流控制失能 USART_InitStructure.USART_Mode = USART_Mode_Tx|USART_Mode_Rx; //收发模式 USART_InitStructure.USART_Parity = USART_Parity_No; //奇偶失能 USART_InitStructure.USART_StopBits = USART_StopBits_1; //1个停止位 USART_InitStructure.USART_WordLength = USART_WordLength_8b; //8位数据 USART_Init(USART3,&USART_InitStructure); USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); //使能USART3接收中断 USART_Cmd(USART3,ENABLE); //使能USART3 NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_Init(&NVIC_InitStructure); } 4.中断函数编写 由于需要对收到的字符串进行比较,因此在中断函数里需要将收到的字符串记录下来。 void USART3_IRQHandler(void) { if(USART_GetITStatus(USART3,USART_IT_RXNE) != RESET) { Usart3_Buffer[Usart3_rx] = USART_ReceiveData(USART3); Usart3_rx++; if(Usart3_Buffer[Usart3_rx-1]==0x0a || Usart3_rx == MAX_BUFF_LEN) { Usart_PutStr(USART3,Usart3_Buffer); Usart3_rx = 0; } } USART_ClearITPendingBit(USART3,USART_IT_RXNE); } 5.主函数 这里用到strcmp函数进行两个字符串的比较,若相等则返回0. #define MAX_BUFF_LEN 10 char LED_ON[10]={"ON"}; char LED_OFF[10]={"OFF"}; char Usart3_Buffer[MAX_BUFF_LEN]; u8 Usart3_rx = 0; int main() { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); uart_init(); led_init(); while(1) { if(strcmp(Usart3_Buffer,LED_ON)==0) { GPIO_ResetBits(GPIOE,GPIO_Pin_5); memset(Usart3_Buffer,0,sizeof(Usart3_Buffer)); } if(strcmp(Usart3_Buffer,LED_OFF)==0) { GPIO_SetBits(GPIOE,GPIO_Pin_5); memset(Usart3_Buffer,0,sizeof(Usart3_Buffer)); } } } |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1618 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1545 浏览 1 评论
979 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
683 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1597 浏览 2 评论
1864浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
645浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
516浏览 3评论
532浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
505浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 21:46 , Processed in 0.881598 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号