打印
[方案相关]

工业级压力传感器设计及实现(华大半导体HC32L136)

[复制链接]
手机看帖
扫描二维码
随时随地手机跟帖
21
有何不可0365|  楼主 | 2021-2-28 23:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览

使用特权

评论回复
22
有何不可0365|  楼主 | 2021-2-28 23:06 | 只看该作者
当起始信号产生后,主机立即传输数据的第一字节:7 位从机地址 + 读写位,读写位控制从机的数据传输方向(0:写;1:读)。被主机寻址的从机会通过在第 9 个 SCL时钟周期将 SDA 置为低电平作为应答。

使用特权

评论回复
23
有何不可0365|  楼主 | 2021-2-28 23:06 | 只看该作者
数据传输过程中,一个 SCL 时钟脉冲传输一个数据位,且 SDA 线只有在 SCL 为低时才可以改变。I2C 总线上位传输图如下所示:

使用特权

评论回复
24
有何不可0365|  楼主 | 2021-2-28 23:07 | 只看该作者

使用特权

评论回复
25
有何不可0365|  楼主 | 2021-2-28 23:08 | 只看该作者

使用特权

评论回复
26
有何不可0365|  楼主 | 2021-2-28 23:08 | 只看该作者
华大半导体I2C 组件可实现 8 位的双向数据传输,传输速率在标准模式下可达到 100Kbps 而在高速模式下可达 400Kbps,在超高速模式下可达 1Mbps,并且可以在四种模式下工作:主机发送模式、主机接收模式、从机接收模式、从机发送模式。 还有一种特殊模式广播呼叫模式,其操作方式与从机接收模式类似。
————————————————

使用特权

评论回复
27
有何不可0365|  楼主 | 2021-2-28 23:09 | 只看该作者
华大半导体HC32L136 I2C 控制器支持以下特性:

支持主机发送/接收,从机发送/接收四种工作模式
支持标准(100Kbps) / 快速(400Kbps) / 高速(1Mbps) 三种工作速率
支持 7 位寻址功能
支持噪声过滤功能
支持广播地址
支持中断状态查询功能

使用特权

评论回复
28
有何不可0365|  楼主 | 2021-2-28 23:10 | 只看该作者
I2C功能模块如下图所示:

使用特权

评论回复
29
有何不可0365|  楼主 | 2021-2-28 23:10 | 只看该作者

使用特权

评论回复
30
有何不可0365|  楼主 | 2021-2-28 23:11 | 只看该作者
本项目中采用主机模式实现数据收、发通信,主收、发送模式数据同步图如下图所示(更详细说明可参见用户手册):

使用特权

评论回复
31
有何不可0365|  楼主 | 2021-2-28 23:12 | 只看该作者

使用特权

评论回复
32
有何不可0365|  楼主 | 2021-2-28 23:12 | 只看该作者

使用特权

评论回复
33
有何不可0365|  楼主 | 2021-2-28 23:13 | 只看该作者
4、项目实现
第1步:明确从机地址(压力传感器地址),NSA2862 的 I2C 设备地址如下表所示:

使用特权

评论回复
34
有何不可0365|  楼主 | 2021-2-28 23:14 | 只看该作者
第2步:配置HC32L136 I2C功能模块,这里需要留意NSA2862 的 I2C通讯引脚的电性特性,如下表所示:

使用特权

评论回复
35
有何不可0365|  楼主 | 2021-2-28 23:14 | 只看该作者

使用特权

评论回复
36
有何不可0365|  楼主 | 2021-2-28 23:16 | 只看该作者

使用特权

评论回复
37
有何不可0365|  楼主 | 2021-2-28 23:17 | 只看该作者
I2C GPIO配置代码如下所示:

使用特权

评论回复
38
有何不可0365|  楼主 | 2021-2-28 23:19 | 只看该作者
///< IO端口配置
void App_PortCfg(void)
{
    stc_gpio_cfg_t stcGpioCfg;
   
    DDL_ZERO_STRUCT(stcGpioCfg);
   
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio,TRUE);   //开启GPIO时钟门控
   
    stcGpioCfg.enDir = GpioDirOut;                           ///< 端口方向配置->输出   
    stcGpioCfg.enOD = GpioOdEnable;                          ///< 开漏输出
    stcGpioCfg.enPu = GpioPuEnable;                          ///< 端口上拉配置->使能
    stcGpioCfg.enPd = GpioPdDisable;                         ///< 端口下拉配置->禁止
   
    Gpio_Init(GpioPortB,GpioPin8,&stcGpioCfg);               ///< 端口初始化
    Gpio_Init(GpioPortB,GpioPin9,&stcGpioCfg);
   
    Gpio_SetAfMode(GpioPortB,GpioPin8,GpioAf1);              ///< 配置PB08为SCL
    Gpio_SetAfMode(GpioPortB,GpioPin9,GpioAf1);              ///< 配置PB09为SDA
}

使用特权

评论回复
39
有何不可0365|  楼主 | 2021-2-28 23:20 | 只看该作者
I2C配置代码如下所示:

使用特权

评论回复
40
有何不可0365|  楼主 | 2021-2-28 23:21 | 只看该作者

///< I2C 模块配置[em:23:]
void App_I2cCfg(void)
{
    stc_i2c_cfg_t stcI2cCfg;
   
    DDL_ZERO_STRUCT(stcI2cCfg);                            ///< 初始化结构体变量的值为0
   
    Sysctrl_SetPeripheralGate(SysctrlPeripheralI2c0,TRUE); ///< 开启I2C0时钟门控
   
    stcI2cCfg.u32Pclk = Sysctrl_GetPClkFreq();             ///< 获取PCLK时钟
    stcI2cCfg.u32Baud = 100000;                            ///< 100K
    stcI2cCfg.enMode = I2cMasterMode;                      ///< 主机模式
    stcI2cCfg.bGc = FALSE;                                 ///< 广播地址应答使能关闭
    I2C_Init(M0P_I2C0,&stcI2cCfg);                         ///< 模块初始化
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则