124 lines
2.5 KiB
C
124 lines
2.5 KiB
C
#include "e32_hal.h"
|
||
|
||
/**
|
||
* 与单片机平台有关
|
||
*/
|
||
#include "main.h"
|
||
#include "gpio.h"
|
||
#include "usart.h"
|
||
|
||
/**
|
||
* @brief 串口发送接口
|
||
*
|
||
* @param buffer 发送内容
|
||
* @param length 发送长度
|
||
*/
|
||
void e32_hal_uart_tx( uint8_t *buffer , uint16_t length )
|
||
{
|
||
HAL_UART_Transmit( &huart1, buffer, length, 0xFFFF);
|
||
}
|
||
|
||
/**
|
||
* @brief 模组忙状态等待
|
||
*/
|
||
void e32_hal_aux_wait(void)
|
||
{
|
||
if( HAL_GPIO_ReadPin( AUX_GPIO_Port , AUX_Pin ) == GPIO_PIN_RESET )
|
||
{
|
||
/* 先等模块空闲 AUX引脚低为忙、高为空闲 */
|
||
while( HAL_GPIO_ReadPin( AUX_GPIO_Port , AUX_Pin ) == GPIO_PIN_RESET )
|
||
{
|
||
///@todo 可以做超时逻辑
|
||
}
|
||
|
||
/* 考虑兼容性,AUX空闲后再稍等1~2ms */
|
||
HAL_Delay(2);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @brief 模组复位
|
||
*/
|
||
void e32_hal_reset(void)
|
||
{
|
||
HAL_GPIO_WritePin( RESET_GPIO_Port, RESET_Pin, GPIO_PIN_RESET );
|
||
|
||
HAL_Delay(1);
|
||
|
||
HAL_GPIO_WritePin( RESET_GPIO_Port, RESET_Pin, GPIO_PIN_SET );
|
||
|
||
#if E32_USE_GPIO_AUX
|
||
/* 注意 硬件重启时并不是立即AUX输出低电平,需要等待一段时间再开始AUX检测 */
|
||
HAL_Delay(10);
|
||
|
||
e32_hal_aux_wait();
|
||
#else
|
||
// /* E32-V2 (V8.1) 版本启动时间较长
|
||
// 可以通过AT+FWCODE=?读取版本信息进行确认 7393-x-xx */
|
||
// e32_delay_ms(1200);
|
||
|
||
/* E32-V2 (V8.2) 版本
|
||
可以通过AT+FWCODE=?读取版本信息进行确认 7459-x-xx */
|
||
e32_delay_ms(30);
|
||
#endif
|
||
|
||
}
|
||
|
||
/**
|
||
* @brief 模组模式切换
|
||
*
|
||
* @param mode 工作模式
|
||
*/
|
||
void e32_hal_work_mode( work_mode_t mode)
|
||
{
|
||
|
||
#if E32_USE_GPIO_AUX
|
||
e32_hal_aux_wait();
|
||
#endif
|
||
|
||
switch(mode)
|
||
{
|
||
/* 模式0: 一般模式 (M0=0 M1=0) */
|
||
case WORK_MODE_TRANSPARENT:
|
||
HAL_GPIO_WritePin( M0_GPIO_Port, M0_Pin, GPIO_PIN_RESET );
|
||
HAL_GPIO_WritePin( M1_GPIO_Port, M1_Pin, GPIO_PIN_RESET );
|
||
break;
|
||
|
||
/* 模式1: 唤醒模式 (M0=1 M1=0) */
|
||
case WORK_MODE_WAKE_ON_RADIO_MASTER:
|
||
HAL_GPIO_WritePin( M0_GPIO_Port, M0_Pin, GPIO_PIN_SET );
|
||
HAL_GPIO_WritePin( M1_GPIO_Port, M1_Pin, GPIO_PIN_RESET );
|
||
break;
|
||
|
||
/* 模式2: 省电模式 (M0=0 M1=1) */
|
||
case WORK_MODE_WAKE_ON_RADIO_SLAVE:
|
||
HAL_GPIO_WritePin( M0_GPIO_Port, M0_Pin, GPIO_PIN_RESET );
|
||
HAL_GPIO_WritePin( M1_GPIO_Port, M1_Pin, GPIO_PIN_SET );
|
||
break;
|
||
|
||
/* 模式3: 休眠模式 (M0=1 M1=1) */
|
||
case WORK_MODE_CONFIG_AND_SLEEP:
|
||
HAL_GPIO_WritePin( M0_GPIO_Port, M0_Pin, GPIO_PIN_SET );
|
||
HAL_GPIO_WritePin( M1_GPIO_Port, M1_Pin, GPIO_PIN_SET );
|
||
break;
|
||
|
||
default:
|
||
while(1); //模式错误
|
||
}
|
||
|
||
#if E32_USE_GPIO_AUX
|
||
/* 引脚切换后 模组有时AUX引脚并不是立即输出低电平,需要稍等再进行检查 */
|
||
HAL_Delay(5);
|
||
e32_hal_aux_wait();
|
||
#else
|
||
|
||
/* 这里保守一点延时,确保模式切换已正确完成 */
|
||
e32_delay_ms(50);
|
||
#endif
|
||
|
||
}
|
||
|
||
|
||
|
||
|