前言
本篇博客详细的介绍如何实现HC08主从机设置,命名,以及如何实现两个STM32通过HC08互相通信,并附带完整的操作步骤,以及源代码。
目录
一、HC08主从配置
1.1VOFA+的下载及基本用法
1.1.1VOFA+的下载
1.1.2VOFA+的基本用法
1.2配置HC08主从机及其他
二、两个STM32通过HC08互相通信
2.1硬件连接
2.2软件实现(附完整源码)
三.手机APP连接HC08
四.HC08的AT指令表
一、HC08主从配置
1.1VOFA+的下载及基本用法
1.1.1VOFA+的下载
VOFA+是一款非常简单好用的串口上位机软件,既可以监视波形调试参数,又可以发送串口指令,满足电赛控制题调试的一切需求,是未来拿下国一同学们的必备工具,官网下载链接如下:
下载中心 | VOFA-Plus上位机
图1是VOFA+的界面,一般只需要修改端口号与波特率,按照STM32配置的串口波特率修改即可。
图1
1.1.2VOFA+的基本用法
1.蓝色图标是启动按钮,成功连接后,接受发送来的串口数据,闪蓝色。
2.红色图标是协议与连接,在此界面设置串口参数配置,如图2。
图2
3.绿色图标界面设置串口指令,点击选择“命令”,如图3。
图3
4.成功生成“命令8”,选择编辑,可以修改名称和发送内容,编辑完成后,双击退出编辑,点击“命令8”控件,就可以发送“1234”了,如图4(未退出编辑模式),之后就需要用这个功能给HC08发送信息。
图4
1.2配置HC08主从机及其他
基本步骤:
1.利用USB转串口模块,将HC08物理连接电脑,并打开VOFA+真正与HC08串口通讯,波特率设置为9600(出厂默认波特率是9600,连接上后可以自定义)。
2.按照AT指令表,编辑VOFA+的命令工具,向HC08发送对应的AT指令。
注意:设置一个为主机,一个为从机,上电即可自动连接。HC08 支持一对一连接,第一次连接后,主机会自动记忆配对对象。如需连接其他模块,必须先清除配对记忆。主从机可以互发消息。(配对中HC08板载灯闪烁,连接成功板载灯常亮)
图5中,我的命令控件叫“设置主机”,发送的内容为“AT+ROLE=M”,查AT指令表(附文末)知该命令设置主机,设置从机则改M为S,“AT+ROLE=S”。
图5
图6中,我的命令控件叫“设置波特率”,发送的内容为懒得打了,如图所示,查表知该命令为设置HC08波特率,再次强调一下HC08出厂设置的波特率是9600。
图6
二、两个STM32通过HC08互相通信
2.1硬件连接
2.2软件实现(附完整源码)
实现思路:
1.实现两个STM32与HC08主从机串口通讯。
2.连从机的STM32与连主机的STM32互相发送信息,收到对应消息点亮的板载灯。
注意:两灯均被点亮说明,实现互相通讯,代码方面两个单片机的代码是一样的,接受中断函数,判断是否收到另一个单片机发送的字符‘a’,同时在main函数的while(1)里一直向另一个单片机发送字符‘a’,现象是先后上电后,两个32的板载灯几乎同时被点亮。
main文件
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "OLED.h"
#include "HC08.h"
int main(void)
{
HC08_Init();//初始化HC08串口
GPIO_InitTypeDef GPIO_InitStructure;//初始化板载灯B5
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_5);//熄灭B5
while (1)
{
HC08_SendByte('a');//发送‘a’
}
}
HC08.h文件
#ifndef __HC08_H
#define __HC08_H
void HC08_Init(void);
void HC08_SendByte(uint8_t Byte);
//void HC08_SendString(char *String);
#endif
HC08.c文件
#include "stm32f10x.h" // Device header
void HC08_Init(void)//USART1 A9-TX A10-RX
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 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;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_Init(USART1, &USART_InitStructure);
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_Init(&NVIC_InitStructure);
USART_Cmd(USART1, ENABLE);
}
void HC08_SendByte(uint8_t Byte)
{
USART_SendData(USART1, Byte);
while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}
int HC08_data=0;
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
{
HC08_data=USART_ReceiveData(USART1);
if(HC08_data=='a')//如果STM32”A”发送的消息是‘a’,则板载灯被点亮
{
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}
}
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
}
三.手机APP连接HC08
步骤:
1.与步骤二的代码相同,不用修改现象是一样的,连接好后,手机端给HC08发送字符‘a’,即可点亮stm32板载灯。
2.下载蓝牙助手APP(此处蓝牙串口调试APP都可以连接,不一定非要下载HC蓝牙助手),附应用信息。
3.连接搜索,用VOFA+命名的HC08,比如我叫LLBW,点击连接就行,之后发送字符‘a’,看是否点亮板载灯。(是否连接成功)