配置:PLLCLK 32
参考电路图stlink与正点原子的接口连的时候,注意板子上接口实际正反是反的
一 蓝牙的AT指令模式
注意EN要接3.3v/EN什么都不接,长按蓝牙按钮的同时然后再上电.
慢闪是AT模式,快闪是透传模式.
指令集:
AT //返回OK
AT+NAME? //返回蓝牙模块的名字
AT+NAME="HC05" //设置蓝牙模块的名字
AT+ROLE? //返回蓝牙模块的状态(从机是0,主机是1)
AT+ROLE=0/1 //设置蓝牙模块为从/主模式
AT+UART? //返回蓝牙模块的波特率
AT+UART=38400,0,0 //设置蓝牙模块的波特率为38400
AT+PSWD? //返回蓝牙模块的配对码
AT+PSWD=“1314” //设置蓝牙模块的配对码
发送指令一定要加回车
注意"\r\n",写程序时候也是(可以参考二)
二 单片机与电脑通信,电脑发送数据控制灯亮灭
uint8_t Tx_str1[]="Hello World!\r\n";
uint8_t Tx_str2[]="LED2 Open!\r\n";
uint8_t Tx_str3[]="LED2 Close!\r\n";
uint8_t Rx_dat[]="0\r\n";
uint8_t Rx_dat1[]="1\r\n";
uint8_t Rx_dat2[]="2\r\n";
#define LED1_ON HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,0);
#define LED1_OFF HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,1);
#define LED2_ON HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,0);
#define LED2_OFF HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,1);
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance==USART1)
{
if(strcmp(Rx_dat,Rx_dat1))
{
}
else
{
LED1_ON;
HAL_UART_Transmit(&huart1,Tx_str2,sizeof(Tx_str2),10000);
LED2_ON;
}
if(strcmp(Rx_dat,Rx_dat2))
{
}
else
{
LED1_OFF;
HAL_UART_Transmit(&huart1,Tx_str3,sizeof(Tx_str3),10000);
LED2_OFF;
}
}
}
主函数中:
LED1_ON;
HAL_UART_Transmit(&huart1,Tx_str1,sizeof(Tx_str1),10000);
LED1_OFF;
while(1)
{HAL_UART_Receive_IT(&huart1,Rx_dat,1);}
三 手机蓝牙与电脑通信
1 接线:
蓝牙模块-单片机:vcc-5v,gnd-gnd,rxd-txd,txd-rxd
2 效果:
手机连接上以后(需要开启位置),发送a,电脑的串口调试助手就会显示接收到a;串口调试助手发送a,那么手机端也会接收到a
四 手机蓝牙与单片机通信,控制灯亮灭
主函数里:
__HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE);
HAL_UART_Receive_IT(&huart2,&rec,sizeof(rec));
uint8_t rec;
extern UART_HandleTypeDef huart2;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if(huart->Instance == USART2)
{
if(rec=='1')
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
if(rec=='2')
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
}
}
HAL_UART_Receive_IT(&huart2,&rec,sizeof(rec));
}
五 手机蓝牙控制小车运动