STM32G474+SPL06-001+I2C通信

一、Cubemx配置

配置参考我之前那个AHT20的文章,配置是一样的。还是利用hlpuart向串口监视器发送信息。

二、SPL06-001代码解释

我在SPL06_001气压计驱动例程的基础上修改的,使用了HAL库。

最后一直运行不出来的原因是SPL06的初始化有问题。

int spl06_init(void)
{
    uint8_t regval = 0;
    uint8_t coef[18] = {0};
  /*
    //i2c_write(SPL06_ADDR, SP06_RESET, 1, &regval);
    HAL_I2C_Mem_Write(&hi2c1, SPL06_ADDR,SP06_RESET, I2C_MEMADD_SIZE_8BIT, &regval, 1, 5000);
    //i2c_read(SPL06_ADDR, SP06_ID, 1, &regval);
    HAL_I2C_Mem_Read(&hi2c1, SPL06_ADDR,SP06_ID, I2C_MEMADD_SIZE_8BIT, &regval, 1, 500);
		
		HAL_UART_Transmit(&hlpuart1, &regval, 10, 500); 
		
    if (0x10 != regval)
    {
        return -1;
    }
    
    HAL_Delay(50);
    */
 
		HAL_I2C_Mem_Read(&hi2c1, SPL06_ADDR,SP06_COEF, I2C_MEMADD_SIZE_8BIT, coef, 18, 500);

    _c0 = ((int16_t)coef[0] << 4) | ((coef[1] & 0xF0) >> 4);
    _c0 = (_c0 & 0x0800) ? (0xF000 | _c0) : _c0;
    _c1 = ((int16_t)(coef[1] & 0x0F) << 8) | coef[2];
    _c1 = (_c1 & 0x0800) ? (0xF000 | _c1) : _c1;
    _c00 = ((int32_t)coef[3] << 12) | ((uint32_t)coef[4] << 4 ) | (coef[5] >> 4);
    _c00 = (_c00 & 0x080000) ? (0xFFF00000 | _c00) : _c00;
    _c10 = ((int32_t)(coef[5] & 0x0F) << 16) | ((uint32_t)coef[6] << 8) | coef[7];
    _c10 = (_c10 & 0x080000) ? (0xFFF00000 | _c10) : _c10;
    _c01 = ((int16_t)coef[8] << 8)  | coef[9];
    _c11 = ((int16_t)coef[10] << 8) | coef[11];
    _c20 = ((int16_t)coef[12] << 8) | coef[13];
    _c21 = ((int16_t)coef[14] << 8) | coef[15];
    _c30 = ((int16_t)coef[16] << 8) | coef[17];
    
    _spl06_pressure_config(PM_RATE_8, PM_PRC_64);
    _spl06_temperature_config(TMP_RATE_1, TMP_PRC_1);
    
    /* 启动测量 */
    regval = MEAS_CTRL_ContinuousPressTemp;
    //i2c_write(SPL06_ADDR, SP06_MEAS_CFG, 1, &regval);
    HAL_I2C_Mem_Write(&hi2c1, SPL06_ADDR,SP06_MEAS_CFG, I2C_MEMADD_SIZE_8BIT, &regval, 1, 5000);

    return 0;
}

我把下面这一段注释掉了,因为我发现我的板子不知道为什么一直过不了这个检查,我感觉这个检查也不太会影响后面代码的运行。注释掉就可以正常工作了。C

//i2c_write(SPL06_ADDR, SP06_RESET, 1, &regval);
    HAL_I2C_Mem_Write(&hi2c1, SPL06_ADDR,SP06_RESET, I2C_MEMADD_SIZE_8BIT, &regval, 1, 5000);
    //i2c_read(SPL06_ADDR, SP06_ID, 1, &regval);
    HAL_I2C_Mem_Read(&hi2c1, SPL06_ADDR,SP06_ID, I2C_MEMADD_SIZE_8BIT, &regval, 1, 500);
		
		HAL_UART_Transmit(&hlpuart1, &regval, 10, 500); 
		
    if (0x10 != regval)
    {
        return -1;
    }
    
    HAL_Delay(50);

除此之外就是这两个函数的替换,我把博主自己写的函数换成HAL库了:

i2c_write(SPL06_ADDR, SP06_RESET, 1, &regval);

换成:

 HAL_I2C_Mem_Write(&hi2c1, SPL06_ADDR,SP06_RESET, I2C_MEMADD_SIZE_8BIT, &regval, 1, 5000);

还有这个

i2c_read(SPL06_ADDR, SP06_ID, 1, &regval);

换成;

 HAL_I2C_Mem_Read(&hi2c1, SPL06_ADDR,SP06_ID, I2C_MEMADD_SIZE_8BIT, &regval, 1, 500);

第一个参数是要用的外设指针,第二个是从机地址,第三个是要读取或者写入的寄存器地址,第四个是大小,第五个是读取或者写入的字符串指针,第六个是要读取或者写入的字符串个数,第七个是等待时间,这个随意设置。

三、工程源码

百度网盘哦

链接:https://pan.baidu.com/s/1s71WMiEG0ta93w9sex8vCg?pwd=6666 
提取码:6666 
--来自百度网盘超级会员V2的分享

<think>嗯,用户想比较STM32F103C8T6和STM32G431RBT6这两款微控制器的区别,包括性能、外设和应用场合。首先,我需要回忆一下这两个型号的基本信息。 首先,STM32F103C8T6属于F1系列,是经典的Cortex-M3内核,主频72MHz,而STM32G431RBT6是G4系列,用的是Cortex-M4内核,主频更高,达到170MHz。性能方面,G4显然更强,特别是浮点运算,因为M4内核支持单精度浮点单元,这对需要复杂计算的场景很有帮助。 外设方面,F1系列可能比较基础,比如有基本的定时器、ADC、USART等,而G4系列可能集成了更多高级外设,比如高分辨率定时器、更先进的ADC模块,可能还有DAC、运算放大器等模拟外设。应用场合的话,F1可能用在工业控制、家电等对性能要求不高的地方,而G4适合需要更高处理能力和复杂外设的应用,比如电机控制、数字电源或者音频处理。 然后,我需要确认用户提供的引用内容是否有相关信息。引用1提到F103C8T6属于中容量MCU,引用3提到它用内部Flash模拟EEPROM,而G431RBT6可能在这方面有不同设计。另外,用户可能关心开发环境的不同,比如是否使用HAL库或者CubeMX,引用2和3提到了HAL库和CubeMX的使用,可能G4系列更依赖CubeMX配置工具。 还要注意功耗方面,G4系列可能优化了能效,适合电池供电的设备。而F1系列可能在成本上更有优势,适合预算敏感的项目。应用场景的差异也需要详细说明,比如G4适合实时控制,F1适合基础控制任务。 需要确保回答结构清晰,分点比较性能、外设、应用场合,并引用提供的资料中的相关内容。可能还需要提到存储容量、外设模块的具体差异,比如ADC的位数和通道数,通信接口的种类等。最后生成相关问题,帮助用户进一步了解如何选择型号或迁移项目。</think>### STM32F103C8T6 与 STM32G431RBT6 对比分析 #### 1. **核心架构与性能** - **STM32F103C8T6** 基于 **Cortex-M3 内核**,主频最高 72 MHz,无硬件浮点单元(FPU),适用于基础控制任务。其 Flash 容量为 64 KB,RAM 为 20 KB,属于中容量 MCU[^1]。 - **STM32G431RBT6** 采用 **Cortex-M4 内核**,主频高达 170 MHz,支持单精度硬件浮点运算(FPU),计算性能显著提升。Flash 容量为 128 KB,RAM 为 32 KB,适合需要复杂算法或实时控制的应用。 #### 2. **外设资源对比** - **模拟外设** - **F103C8T6**:集成 2 个 12 位 ADC(1 μs 转换时间),无 DAC。 - **G431RBT6**:配备 4 个 12 位 ADC(支持 5 MSPS)和 2 个 12 位 DAC,新增运算放大器(OPAMP)和高速比较器,适用于高精度信号处理[^2]。 - **数字外设** - **F103C8T6**:基础外设如 SPI、I2C、USART,以及 3 个通用定时器。 - **G431RBT6**:支持更多高级功能,如高分辨率定时器(150 ps)、CAN-FD 接口,以及硬件加密模块(AES、PKA),适合通信密集型场景。 - **存储扩展** - **F103C8T6**:需外接 Flash 模块(如 W25Q128)扩展存储[^3]。 - **G431RBT6**:内置更大 Flash 和 RAM,部分型号支持 Quad-SPI 接口,可直连外部存储。 #### 3. **应用场景** - **F103C8T6**:适合成本敏感、功能简单的场景,如家电控制、基础工业设备或数据采集系统[^1]。 - **G431RBT6**:针对高性能需求,如电机控制(PWM 精度更高)、数字电源、音频处理或物联网网关。 #### 4. **开发与生态** - **F103C8T6**:支持标准外设库(SPL)和部分 HAL 库,工程搭建需手动配置。 - **G431RBT6**:全面适配 STM32CubeMX 工具和 HAL 库,自动化配置外设,缩短开发周期。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值