引脚定义
引脚多的时候的定义
//使用枚举来表示状态
typedef enum bt_status
{
HC05_STATUS_DISCONNECT = 0,
HC05_STATUS_CONNECT = 1,
}BT_ConnectStatus_t;
//枚举
enum HC05Pin_t
{
HC05_TX = 0,
HC05_RX = 1,
HC05_EN = 2,
HC05_STATE = 3,
HC05_COUNT
};
typedef struct blue_tooth{
UART_t uart;
GPIO_Port_t port[HC05_COUNT]; //由于本次实验需要四个引脚,所以用数组;不然得四个引脚
uint16_t pin[HC05_COUNT];
uint32_t rx_buffer_current_cnt;
uint32_t rx_buffer_total_length; //缓冲区总的长度
char rx_buffer[HC05_RECEIVE_BUFFER_SIZE]; //接受AT指令的缓冲区
}BlueTooth_t;
也可以这样定义:
枚举类型:
enum HC05Pin_t
{
//类似于哈希映射
HC05_TX = 0,
HC05_RX = 1,
HC05_EN = 2,
HC05_STATE = 3,
HC05_COUNT
};
这段代码定义了一个枚举类型`HC05Pin_t`,用于清晰、安全地表示与HC05蓝牙模块相关的引脚。枚举(enumeration)是一种整型数据类型,它可以有几个预定义的命名整数常量。在本例中,`HC05Pin_t`定义了以下几种状态:
- `HC05_TX = 0`: 表示HC05蓝牙模块的传输(TX)引脚。这是一个输出引脚,HC05通过它发送数据到其他设备。
- `HC05_RX = 1`: 表示接收(RX)引脚。这是一个输入引脚,HC05通过它接收来自其他设备的数据。
- `HC05_EN = 2`: 通常表示使能(EN)或控制引脚,用于控制HC05模块的开启或关闭状态。
- `HC05_STATE = 3`: 可能是指一个状态指示引脚,用于表示HC05的工作状态(如模块是否准备好传输数据、连接状态等)。
- `HC05_COUNT`: 这个并不是一个实际的引脚,而是一个计数器,用来表示上述有效引脚的数量。在某些编程上下文中,这可用于循环遍历或数组大小确定等目的。
通过使用枚举类型,代码变得更加可读且易于维护,因为它允许开发者以有意义的名字引用这些引脚,而不是直接使用数值,从而减少了因硬编码数值而导致的错误。
蓝牙初始化
/******************************************************************************
* @brief 初始化HC-05模块
*
* @param[in] bt : BlueTooth_t结构体指针
*
* @return 0, 表示初始化成功, 其他值表示失败
*
******************************************************************************/
int BT_Init(BlueTooth_t *bt)
{
if(!bt)
return -1;
bt->rx_buffer_current_cnt = 0;
bt->rx_buffer_total_length = HC05_RECEIVE_BUFFER_SIZE;
memset(bt->rx_buffer, 0, sizeof(bt->rx_buffer));
/* 初始化用到的硬件 */
bt_hw_init(bt);
/* 使用AT指令初始化HC-05模块 */
bt_software_reset(bt);
return 0;
}
蓝牙硬件初始化配置:
初始化引脚定义:
#define HC05_DelayMs(t) Delay_Ms(t)
#define HC05_GPIO_LOW 0
#define HC05_GPIO_HIGH 1
#if defined (STM32F40_41xxx)
#define HC05_CONFIG_IO_OUTPUT(port, pin) {GPIO_InitTypeDef GPIO_InitStructure; \
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; \
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;\
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; \
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; \
GPIO_InitStructure.GPIO_Pin = pin ; \
GPIO_Init(port, &GPIO_InitStructure);}
#define HC05_CONFIG_IO_INPUT(port, pin) {GPIO_InitTypeDef GPIO_InitStructure; \
GPIO_InitStructure.GPIO_Mode = GPIO_