stm32f103

配置: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

  1. 手机和蓝牙模块相连应为透传模式,EN是不接的
  2. 想AT模式通过电脑串口调试助手修改蓝牙的,EN应该接3.3v.
  3. 蓝牙模块的rxd和txd接的是单片机原本跳线帽所在的txd和rxd,这一部分是ch340的.即:单片机的串口1的txd和rxd原本通过接线帽连在ch340的rxd和txd上,然后ch340串口转usb下载程序到电脑,也就是我们一般和电脑通信都是用串口1的;当我们给跳线帽取下来,那就直接接ch340的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));
}

五 手机蓝牙控制小车运动

你可能感兴趣的:(stm32,单片机,嵌入式硬件)