ATK-HC05蓝牙串口模块使用说明-AN1301

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

AN1301ATK-HC05蓝牙串口模块使用本应用文档(AN1301,对应战舰STM32开发板扩展实验1/MiniSTM32开发板扩展实验22)将教大家如何在ALIENTEKSTM32开发板上使用ATK-HC05蓝牙串口模块(注意,本文档同时适用ALIENTEK战舰和MiniSTM32两款开发板)。本文档我们将使用ATK-HC05蓝牙串口模实现蓝牙串口通信,并和手机连接,实现手机控制开发板。本文档分为如下几部分:1,ATK-HC05蓝牙串口模块简介2,硬件连接3,软件实现4,验证1、ATK-HC05蓝牙串口模块简介ATK-HC05模块,是ALIENTEK生成的一款高性能主从一体蓝牙串口模块,可以同各种带蓝牙功能的电脑、蓝牙主机、手机、PDA、PSP等智能终端配对,该模块支持非常宽的波特率范围:4800~1382400,并且模块兼容5V或3.3V单片机系统,可以很方便与您的产品进行连接。使用非常灵活、方便。ATK-HC05模块非常小巧(16mm*32mm),模块通过6个2.54mm间距的排针与外部连接,模块外观如图1.1所示:图1.1ATK-HC05模块外观图图1.1中,从右到左,依次为模块引出的PIN1~PIN6脚,各引脚的详细描述如表1.1所示:序号名称说明1LED配对状态输出;配对成功输出高电平,未配对则输出低电平。2KEY用于进入AT状态;高电平有效(悬空默认为低电平)。3RXD模块串口接收脚(TTL电平,不能直接接RS232电平!),可接单片机的TXD4TXD模块串口发送脚(TTL电平,不能直接接RS232电平!),可接单片机的RXD5GND地6VCC电源(3.3V~5.0V)表1.1ATK-HC05模块各引脚功能描述另外,模块自带了一个状态指示灯:STA。该灯有3种状态,分别为:1,在模块上电的同时(也可以是之前),将KEY设置为高电平(接VCC),此时STA慢闪(1秒亮1次),模块进入AT状态,且此时波特率固定为38400。2,在模块上电的时候,将KEY悬空或接GND,此时STA快闪(1秒2次),表示模块进入可配对状态。如果此时将KEY再拉高,模块也会进入AT状态,但是STA依旧保持快闪。3,模块配对成功,此时STA双闪(一次闪2下,2秒闪一次)。有了STA指示灯,我们就可以很方便的判断模块的当前状态,方便大家使用。ATK-HC05蓝牙串口模块所有功能都是通过AT指令集控制,比较简单,该部分使用以及模块的详细参数等信息,请参考ATK-HC05-V11用户手册.pdf和HC05蓝牙指令集.pdf。通过ATK-HC05蓝牙串口模块,任何单片机(3.3V/5V电源)都可以很方便的实现蓝牙通信,从而与包括电脑、手机、平板电脑等各种带蓝牙的设备连接。ATK-HC05蓝牙串口模块的原理图如图1.2所示:图1.2ATK-HC05蓝牙串口模块原理图2、硬件连接本实验功能简介:开机检测ATK-HC05蓝牙模块是否存在,如果检测不成功,则报错。检测成功之后,显示模块的主从状态,并显示模块是否处于连接状态,DS0闪烁,提示程序运行正常。按KEY0按键,可以开启/关闭自动发送数据(通过蓝牙模块发送);按WK_UP按键可以切换模块的主从状态。蓝牙模块接收到的数据,将直接显示在LCD上(仅支持ASCII字符显示)。同时,我们还可以通过USMART对ATK-HC05蓝牙模块进行AT指令查询和设置。结合手机端蓝牙软件(蓝牙串口助手v1.97.apk),可以实现手机无线控制开发板(点亮和关闭LED1)。所要用到的硬件资源如下:1,指示灯DS0、DS12,KEY0/WK_UP两个按键3,串口1、串口24,TFTLCD模块5,ATK-HC05-V11蓝牙串口模块接下来,我们看看ATK-HC05蓝牙串口模块同ALIENTEKSTM32开发板的连接,前面我们介绍了ATK-HC05蓝牙串口模块的接口,我们通过杜邦线连接ATK-HC05模块和开发板的相应端口,连接关系如表2.1所示:ATK-HC05蓝牙模块与开发板连接关系ATK-HC05蓝牙串口模块VCCGNDTXDRXDKEYLEDALIENTEKSTM32开发板3.3V/5VGNDPA3PA2PC4PC5表2.1ATK-HC05蓝牙模块同ALIENTEKSTM32开发板连接关系表表中ATK-HC05蓝牙串口模块的VCC,因为我们的模块是可以3.3V或5V供电的,所以可以接开发板的3.3V电源,也可以接开发板的5V电源,这个随便大家自己选择。为了测试蓝牙模块的所有功能,上表我们用了6根线连接开发板,在实际使用的时候,如果不需要进入AT设置和状态指示,则只需要4根线连接即可:VCC/GND/TXD/RXD。3、软件实现本实验(注:这里仅以战舰板代码为例进行介绍,MiniSTM32开发板对应代码几乎一模一样,详见MiniSTM32开发板扩展实验22),我们在标准例程:USMART调试实验的基础上修改,在HARDWARE文件夹里面新建USART2和HC05两个文件夹,并分存放usart2.c,usart2.h和hc05.c,hc05.h等几个文件。并在工程工程HARDWARE组里面添加usart2.c和hc05.c两个文件,并在工程添加usart2.h和hc05.h的头文件包含路径。在usart2.c里面,我们输入如下代码:#includedelay.h#includeusart2.h#includestdarg.h#includestdio.h#includestring.h//串口发送缓存区__align(8)u8USART2_TX_BUF[USART2_MAX_SEND_LEN];//发送缓冲#ifdefUSART2_RX_EN//如果使能了接收//串口接收缓存区u8USART2_RX_BUF[USART2_MAX_RECV_LEN];//接收缓冲//通过判断接收连续2个字符之间的时间差不大于10ms来决定是不是一次连续的数据.//如果2个字符接收间隔超过10ms,则认为不是1次连续数据.也就是超过10ms没有接//收到任何数据,则表示此次接收完毕.//接收到的数据状态//[15]:0,没有接收到数据;1,接收到了一批数据.//[14:0]:接收到的数据长度u16USART2_RX_STA=0;voidUSART2_IRQHandler(void){u8res;if(USART2-SR&(15))//接收到数据{res=USART2-DR;if(USART2_RX_STAUSART2_MAX_RECV_LEN)//还可以接收数据{TIM4-CNT=0;//计数器清空if(USART2_RX_STA==0)TIM4_Set(1);//使能定时器4的中断USART2_RX_BUF[USART2_RX_STA++]=res;//记录接收到的值}else{USART2_RX_STA|=115;//强制标记接收完成}}}//初始化IO串口2//pclk1:PCLK1时钟频率(Mhz)//bound:波特率voidUSART2_Init(u32pclk1,u32bound){RCC-APB2ENR|=18;//使能PORTG口时钟GPIOG-CRH&=0XFFFFFF0F;//IO状态设置GPIOG-CRH|=0X00000030;//IO状态设置RCC-APB2ENR|=12;//使能PORTA口时钟GPIOA-CRL&=0XFFFF00FF;//IO状态设置GPIOA-CRL|=0X00008B00;//IO状态设置RCC-APB1ENR|=117;//使能串口时钟RCC-APB1RSTR|=117;//复位串口2RCC-APB1RSTR&=~(117);//停止复位//波特率设置USART2-BRR=(pclk1*1000000)/(bound);//波特率设置USART2-CR1|=0X200C;//1位停止,无校验位.USART2-CR3=17;//使能串口2的DMA发送UART_DMA_Config(DMA1_Channel7,(u32)&USART2-DR,(u32)USART2_TX_BUF);//DMA1通道7,外设为串口2,存储器为USART2_TX_BUF#ifdefUSART2_RX_EN//如果使能了接收//使能接收中断USART2-CR1|=18;//PE中断使能USART2-CR1|=15;//接收缓冲区非空中断使能MY_NVIC_Init(2,3,USART2_IRQChannel,2);//组2,最低优先级TIM4_Init(99,7199);//10ms中断USART2_RX_STA=0;//清零TIM4_Set(0);//关闭定时器4#endif}//串口2,printf函数//确保一次发送数据不超过USART2_MAX_SEND_LEN字节voidu2_printf(char*fmt,...){va_listap;va_start(ap,fmt);vsprintf((char*)USART2_TX_BUF,fmt,ap);va_end(ap);while(DMA1_Channel7-CNDTR!=0);//等待通道7传输完成UART_DMA_Enable(DMA1_Channel7,strlen((constchar*)USART2_TX_BUF));\//通过dma发送出去}//定时器4中断服务程序voidTIM4_IRQHandler(void){if(TIM4-SR&0X01)//是更新中断{USART2_RX_STA|=115;//标记接收完成TIM4-SR&=~(10);//清除中断标志位TIM4_Set(0);//关闭TIM4}}//设置TIM4的开关//sta:0,关闭;1,开启;voidTIM4_Set(u8sta){if(sta){TIM4-CNT=0;//计数器清空TIM4-CR1|=10;//使能定时器4}elseTIM4-CR1&=~(10);//关闭定时器4}//通用定时器中断初始化//这里始终选择为APB1的2倍,而APB1为36M//arr:自动重装值。//psc:时钟预分频数voidTIM4_Init(u16arr,u16psc){RCC-APB1ENR|=12;//TIM4时钟使能TIM4-ARR=arr;//设定计数器自动重装值TIM4-PSC=psc;//预分频器TIM4-DIER|=10;//允许更新中断TIM4-CR1|=0x01;//使能定时器4MY_NVIC_Init(1,3,TIM4_IRQChannel,2);//抢占2,子优先级3,组2在2中优先级最低}#endif///////////////////////////////////////USART2DMA发送配置部分////////////////////////////////////DMA1的各通道配置//这里的传输形式是固定的,这点要根据不同的情况来修改//从存储器-外设模式/8位数据宽度/存储器增量模式//DMA_CHx:DMA通道CHx//cpar:外设地址//cmar:存储器地址voidUART_DMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32cpar,u32cmar){RCC-AHBENR|=10;//开启DMA1时钟delay_us(5);DMA_CHx-CPAR=cpar;//DMA1外设地址DMA_CHx-CMAR=cmar;//DMA1,存储器地址DMA_CHx-CCR=0X00000000;//复位DMA_CHx-CCR|=14;//从存储器读DMA_CHx-CCR|=05;//普通模式DMA_CHx-CCR|=06;//外设地址非增量模式DMA_CHx-CCR|=17;//存储器增量模式DMA_CHx-CCR|=08;//外设数据

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功