优化整定,DHCP有问题待优化
This commit is contained in:
144
drivers/hal/stm32f4_hal_i2c.c
Normal file
144
drivers/hal/stm32f4_hal_i2c.c
Normal file
@ -0,0 +1,144 @@
|
||||
/*
|
||||
* STM32F4 I2C硬件抽象层实现
|
||||
* 功能:实现STM32F4平台的I2C硬件抽象层
|
||||
* 依赖硬件:STM32F407VE
|
||||
* 跨平台适配点:通过硬件抽象层接口适配不同平台
|
||||
*/
|
||||
|
||||
#include "hal.h"
|
||||
#include "stm32f4xx_hal.h"
|
||||
|
||||
/* I2C句柄 */
|
||||
static I2C_HandleTypeDef hi2c1;
|
||||
|
||||
/**
|
||||
* @brief I2C初始化
|
||||
* @param clock_speed: 时钟速度
|
||||
* @return hal_status_t: 操作结果
|
||||
* @note 初始化I2C硬件
|
||||
*/
|
||||
static hal_status_t stm32f4_i2c_init(hal_i2c_clock_speed_t clock_speed)
|
||||
{
|
||||
hi2c1.Instance = I2C1;
|
||||
hi2c1.Init.ClockSpeed = clock_speed;
|
||||
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
|
||||
hi2c1.Init.OwnAddress1 = 0;
|
||||
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
|
||||
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
|
||||
hi2c1.Init.OwnAddress2 = 0;
|
||||
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
|
||||
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
|
||||
|
||||
if (HAL_I2C_Init(&hi2c1) != HAL_OK) {
|
||||
return HAL_STATUS_ERROR;
|
||||
}
|
||||
|
||||
return HAL_STATUS_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief I2C反初始化
|
||||
* @return hal_status_t: 操作结果
|
||||
* @note 反初始化I2C硬件
|
||||
*/
|
||||
static hal_status_t stm32f4_i2c_deinit(void)
|
||||
{
|
||||
if (HAL_I2C_DeInit(&hi2c1) != HAL_OK) {
|
||||
return HAL_STATUS_ERROR;
|
||||
}
|
||||
|
||||
return HAL_STATUS_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief I2C主模式发送数据
|
||||
* @param dev_addr: 设备地址
|
||||
* @param data: 数据指针
|
||||
* @param len: 数据长度
|
||||
* @param timeout: 超时时间
|
||||
* @return hal_status_t: 操作结果
|
||||
* @note 发送数据,使用阻塞方式
|
||||
*/
|
||||
static hal_status_t stm32f4_i2c_master_transmit(uint16_t dev_addr, const uint8_t *data, uint32_t len, uint32_t timeout)
|
||||
{
|
||||
if (HAL_I2C_Master_Transmit(&hi2c1, dev_addr, (uint8_t *)data, len, timeout) != HAL_OK) {
|
||||
return HAL_STATUS_ERROR;
|
||||
}
|
||||
|
||||
return HAL_STATUS_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief I2C主模式接收数据
|
||||
* @param dev_addr: 设备地址
|
||||
* @param data: 数据指针
|
||||
* @param len: 数据长度
|
||||
* @param timeout: 超时时间
|
||||
* @return hal_status_t: 操作结果
|
||||
* @note 接收数据,使用阻塞方式
|
||||
*/
|
||||
static hal_status_t stm32f4_i2c_master_receive(uint16_t dev_addr, uint8_t *data, uint32_t len, uint32_t timeout)
|
||||
{
|
||||
if (HAL_I2C_Master_Receive(&hi2c1, dev_addr, data, len, timeout) != HAL_OK) {
|
||||
return HAL_STATUS_ERROR;
|
||||
}
|
||||
|
||||
return HAL_STATUS_OK;
|
||||
}
|
||||
|
||||
/* I2C硬件抽象层操作结构体 */
|
||||
const hal_i2c_ops_t stm32f4_i2c_ops = {
|
||||
.init = stm32f4_i2c_init,
|
||||
.deinit = stm32f4_i2c_deinit,
|
||||
.master_transmit = stm32f4_i2c_master_transmit,
|
||||
.master_receive = stm32f4_i2c_master_receive
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief I2C MSP初始化
|
||||
* @param i2cHandle: I2C句柄
|
||||
* @return 无
|
||||
* @note 初始化I2C的MSP
|
||||
*/
|
||||
void HAL_I2C_MspInit(I2C_HandleTypeDef* i2cHandle)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||
if(i2cHandle->Instance==I2C1)
|
||||
{
|
||||
/* I2C1 clock enable */
|
||||
__HAL_RCC_I2C1_CLK_ENABLE();
|
||||
__HAL_RCC_GPIOB_CLK_ENABLE();
|
||||
|
||||
/**I2C1 GPIO Configuration
|
||||
PB6 ------> I2C1_SCL
|
||||
PB7 ------> I2C1_SDA
|
||||
*/
|
||||
GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
|
||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_OD;
|
||||
GPIO_InitStruct.Pull = GPIO_PULLUP;
|
||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
|
||||
GPIO_InitStruct.Alternate = GPIO_AF4_I2C1;
|
||||
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief I2C MSP反初始化
|
||||
* @param i2cHandle: I2C句柄
|
||||
* @return 无
|
||||
* @note 反初始化I2C的MSP
|
||||
*/
|
||||
void HAL_I2C_MspDeInit(I2C_HandleTypeDef* i2cHandle)
|
||||
{
|
||||
if(i2cHandle->Instance==I2C1)
|
||||
{
|
||||
/* Peripheral clock disable */
|
||||
__HAL_RCC_I2C1_CLK_DISABLE();
|
||||
|
||||
/**I2C1 GPIO Configuration
|
||||
PB6 ------> I2C1_SCL
|
||||
PB7 ------> I2C1_SDA
|
||||
*/
|
||||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user