完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本人也是刚接触stm32,在假期花了几天时间去弄stm2与蓝牙之间的通信过程,总算弄出来了。在此做一个笔记,分享一下过程。这第一次写博客,希望不会太烂~~~
目录介绍 *准备工作 *HC-05简介 *STM32F429简介 *代码编写 *视频效果展示 *程序源码包 准备工作 本次小实验用到的开发板是正点原子的阿波罗STM32F429,蓝牙是某宝上买的HC-05模块,一台安卓手机,蓝牙APP,四根杜邦线 HC-05简介 这款蓝牙是比较通用的蓝牙2.0模块,在某宝上也比较常见,也比较便宜,适合学生党开发,当然也可以选择正点原子提供的蓝牙模块,只不过价格…使用蓝牙通信有简单方便等特点,在本次实验所需要做的仅仅是修改波特率和接入开发板连通手机下面就是HC-05正面图。 可以看到该蓝牙模块有6个引脚,其中需要用到有四个:VCC(+5V)、GND、RX、TX,与开发板的硬件连接如下: 下面开始修改波特率,蓝牙模块的默认波特率是38400,由于我需要的波特率是115200,因此需要先通过串口调试助手和USB转TTL模块更改波特率。接线也是按照:VCC---->VCC,GND---->GND,TX---->RX,RX---->TX。接好线后要长按蓝牙上面的按钮进入命令响应工作模式,就可以开始修改波特率了。用到的 AT指令是:AT+UART=115200,0,0。返回OK就说明修改成功了。详细过程参考Yngz_Miao大神的博客 至此蓝牙模块的准备工作就完成了,下面开始介绍STM32F429。 STM32F429简介 相信想学STM32的同学都对开发板有了初步的了解,我就不详细介绍了。本次实验需要用到的工程源码是基于原子哥配套的串口发送和接收实验的视频教程来编写的,主要用到的串口是USART1,在代码部分我会贴出主要代码,原理部分相信HAL库的开发文档有更详细的介绍,就不解释了。需要注意的是:在烧录代码的前要把USART1即PA9和PA10用跳线帽短接,如下图。 代码编写 在建立工程时我主要编写修改三个文件:main.c、uart1.c和led.c,其中的关键代码是存放串口初始化及配置的uart1.c文件,由于我不是使用工程模板中的usart.c文件而是自己编写了uart1.c文件,因此首先需要把SYSTEM文件夹下面的几个函数注释掉,如下图:保留76行之前的代码,后面的函数一个个注释掉。 然后首先看看uart1.c文件的代码: #include "sys.h" #include "delay.h" #include "usart.h" #include "uart1.h" #include "led.h" u8 rdata[1]; UART_HandleTypeDef usart1_handler;//由HAL_UART_Init(UART_HandleTypeDef *huart),需要定义一个结构体成员指针 void uart1_init() { usart1_handler.Instance=USART1;//基地址 usart1_handler.Init.BaudRate=115200;//波特率 usart1_handler.Init.WordLength=UART_WORDLENGTH_8B;//字节长度 usart1_handler.Init.StopBits=UART_STOPBITS_1;//停止位 usart1_handler.Init.HwFlowCtl=UART_HWCONTROL_NONE;//硬件流控制 usart1_handler.Init.Mode=UART_MODE_TX_RX;//开启发送、接收模式 usart1_handler.Init.Parity=UART_PARITY_NONE;//奇偶校验位 HAL_UART_Init(&usart1_handler);//函数需要包含句柄,因此需要在开头定义此处调用 } void HAL_UART_MspInit(UART_HandleTypeDef *huart) { GPIO_InitTypeDef GPIO_Initure; if(huart->Instance==USART1) { __HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟 __HAL_RCC_USART1_CLK_ENABLE(); //使能USART1时钟 GPIO_Initure.Pin=GPIO_PIN_9; //PA9 GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出 GPIO_Initure.Pull=GPIO_PULLUP; //上拉 GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速 GPIO_Initure.Alternate=GPIO_AF7_USART1; //复用为USART1 HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化PA9 GPIO_Initure.Pin=GPIO_PIN_10; //PA10 HAL_GPIO_Init(GPIOA,&GPIO_Initure); //初始化PA10 HAL_NVIC_SetPriority(USART1_IRQn, 3, 3);//设置中断优先级 HAL_NVIC_EnableIRQ(USART1_IRQn);//使能中断通道 } } void USART1_IRQHandler(void)//中断服务函数 { HAL_UART_IRQHandler(&usart1_handler);//调用HAL库提供的中断处理函数 HAL_UART_Receive_IT(&usart1_handler, rdata, sizeof(rdata));//使能接收中断 } void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)//接收完成回调函数 { u8 rec; if(huart->Instance==USART1) { rec=rdata[0];//rec保存接收到的一位数据(u8 rdata[1];) HAL_UART_Transmit(&usart1_handler, &rec, 1, 1000);//需要显示在电脑串口助手上,需要调用HAL_UART_Transmit()函数 if(rec=='1') { LED0=0; LED1=1; } if(rec=='2') { LED0=1; LED1=0; } } } uart1.c中的代码其实就是视频教程中串口接收的教程,买了开发板的同学应该知道在哪,直接拿过来修改就可以了: 再贴出一下uart1.h的代码:其实就是对uart1.c的几个函数和变量的声明 #ifndef UART1_H #define UART1_H #include "sys.h" extern u8 rdata[1]; extern UART_HandleTypeDef usart1_handler;//声明此变量在别的函数定义了 void uart1_init(void); #endif 下面是led.c和led.h中的代码: #ifndef UART1_H #define UART1_H #include "sys.h" extern u8 rdata[1]; extern UART_HandleTypeDef usart1_handler;//声明此变量在别的函数定义了 void uart1_init(void); #endif #ifndef _LED_H #define _LED_H #include "sys.h" #define LED0 PBout(1) //LED0 #define LED1 PBout(0) //LED1 void LED_Init(void); #endif 最后看一下主函数main.c中的代码: #include "sys.h" #include "delay.h" #include "usart.h" #include "uart1.h" #include "led.h" int main(void) { u8 buffer[] ="test"; HAL_Init(); //初始化HAL库 Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhz delay_init(180); uart1_init(); LED_Init(); while(1) { HAL_UART_Transmit(&usart1_handler,buffer,sizeof(buffer),1000);//使能发送 printf("rn"); HAL_UART_Receive_IT(&usart1_handler, rdata, sizeof(rdata));//使能接收中断 delay_ms(3000); } } 这些代码都有详细的注释,跟原子哥视频教学的一模一样,无非是寄存器的使用函数的调用,看不懂的话可以去看视频。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1627 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1550 浏览 1 评论
984 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1601 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
652浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
520浏览 3评论
539浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
508浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 03:14 , Processed in 0.825531 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号