优化整定,DHCP有问题待优化

This commit is contained in:
冯佳
2026-03-09 15:34:18 +08:00
parent 20597d22e5
commit 925df72fa0
30 changed files with 2556 additions and 2002 deletions

View 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);
}
}