用户工具

站点工具


icore4t_9
银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2019-02-1 gingko 初次建立

STM32CubeMX教程九——I2C实验

1.在主界面选择File–>New Project 或者直接点击ACCEE TO MCU SELECTOR 2.出现芯片型号选择,搜索自己芯片的型号,双击型号,或者点击Start Project进入配置在搜索栏的下面,提供的各 种查找方式,可以选择芯片内核,型号,等等,可以帮助你查找芯片。本实验选取的芯片型号为:STM32H750IBKx。 3.配置RCC,使用外部时钟源 4.时基源选择SysTick 5.将PA10,PB7,PB8设置为GPIO_Output 6.引脚模式配置 7.设置串口 8.在NVIC Settings一栏使能接收中断 9.时钟源设置,选择外部高速时钟源,配置为最大主频 10.工程文件的设置, 这里就是工程的各种配置 我们只用到有限几个,其他的默认即可 IDE我们使用的是 MDK V5.27 11.点击Code Generator,进行进一步配置

  • Copy all used libraries into the project folder
  • 将HAL库的所有.C和.H都复制到所建工程中
    • 优点:这样如果后续需要新增其他外设又可能不再用STM32CubeMX的时候便会很方便
    • 缺点:体积大,编译时间很长
  • Copy only the necessary library files
  • 只复制所需要的.C和.H(推荐)
    • 优点:体积相对小,编译时间短,并且工程可复制拷贝
    • 缺点:新增外设时需要重新用STM32CubeMX导入
  • Add necessary library files as reference in the toolchain project configuration file
  • 不复制文件,直接从软件包存放位置导入.C和.H
    • 优点:体积小,比较节约硬盘空间
    • 缺点:复制到其他电脑上或者软件包位置改变,就需要修改相对应的路径

自行选择方式即可 12.然后点击GENERATE CODE 创建工程 创建成功,打开工程。

实验九:I2C通信实验——温度监控

一、 实验目的与意义

  1. 了解STM32 I2C结构。
  2. 了解STM32 I2C特征。
  3. 掌握I2C的使用方法。
  4. 掌握STM32 HAL库中I2C属性的配置方法。
  5. 掌握KEILMDK 集成开发环境使用方法。

二、 实验设备及平台

  1. iCore4T 双核心板。
  2. JLINK(或相同功能)仿真器。
  3. Micro USB线缆。
  4. Keil MDK 开发平台。
  5. STM32CubeMX开发平台。
  6. 装有WIN XP(及更高版本)系统的计算机。

三、 实验原理

1.LM75A介绍

  • LM75A是一款内置带隙温度传感器和∑-Δ模数转换功能的温度数字转换器,它也是一个温度检测器,可提供过热输出功能。TI公司和NXP公司均有LM75A的同名产品,NXP的LM75A具有更高的温度精度,因此iCore4T核心板上的LM75A为NXP系列,下文将对NXP公司的LM75A产品进行介绍。
  • LM75A包含多个数据寄存器:配置寄存器(Conf)用来存储器件的某些设置,如器件的工作模式、OS工作模式、OS极性和OS错误队列等;温度寄存器(Temp)用来存储读取的数字温度;设定点寄存器(Tos & Thyst)用来存储可编程的过热关断和滞后限制,器件通过两线的串行I2C总线接口与控制器通信。LM75A还包含一个开漏输出(OS)管脚,当温度超过编程限制的值时该输出有效。LM75A有3个可选的逻辑地址管脚,使得同一总线上可同时连接8个器件而不发生地址冲突。
  • LM75A可配置成不同的工作模式。它可设置成在正常工作模式下周期性地对环境温度进行监控,或进入关断模式来将器件功耗降至最低。OS输出有2种可选的工作模式:OS比较器模式和OS中断模式。OS输出可选择高电平或低电平有效。错误队列和设定点限制可编程,可以激活OS输出。
  • 温度寄存器通常存放着一个11位的二进制数的补码,用来实现0.125℃的精度,在需要精确地测量温度偏移或超出限制范围的应用中非常有用。当LM75A在转换过程中不产生中断(I2C总线部分与∑-Δ转换部分完全独立)或LM75A不断被访问时,器件将一直更新温度寄存器中的数据。
  • 正常工作模式下,当器件上电时,OS工作在比较器模式,温度阈值为80℃,滞后阈值为75℃,这时,LM75A就可用作独立的温度控制器,预定义温度设定点。器件可以完全取代工业标准的LM75,并提供了良好的温度精度(0.125℃),单个器件的电源范围在2.8V~5.5V。
  • 特性:
    • I2C总线接口,一条总线上可连接多达8个LM75A
    • 电源电压范围:2.8V~5.5V
    • 环境温度范围: -55℃~+125℃
    • 提供0.125℃精度的11位ADC
    • 温度精度:-25℃~+100℃时为±2℃,-55℃~+125℃时为±3℃
    • 可编程温度阈值和滞后设定点
    • 低功耗设计,关断模式下消耗的电流仅为3.5μA
    • 上电时器件可用作一个独立的温度控制器
  • 管脚定义:

  • 原理图:

2.LM75A时序图

3.LM75A框图

4.LM75A寄存器介绍

  • 温度寄存器(地址0x00):
  • 温度寄存器是一个只读寄存器,包含 2 个 8 位的数据字节,由一个高数据字节( MS)和一个低数据字节( LS)组成。在这两个字节中只用到 11 位,来存放分辨率为 0.125℃的Temp数据(以二进制补码数据的形式),如表 3.1所示。对于 8 位的I2C总线来说,只要从LM75A的“ 00 地址”连续读两个字节即可(温度的高 8 位在前)。

  • 根据11位的Temp数据来计算Temp值的方法:
    • 若 D10=0,温度值(℃)=+(Temp数据)×0.125℃;
    • 若 D10=1,温度值(℃)=-(Temp数据的二进制补码)×0.125℃。

5.温度与寄存器数值对照表

四、 实验程序

1. 主函数

int main(void)
{
  HAL_Init();
  SystemClock_Config();
 
  i2c.initialize();
  axp152.initialize();
  axp152.set_dcdc1(3500);//[ARM & FPGA BK1/2/6 &OTHER]
  axp152.set_dcdc2(1200);//[FPGA INT & PLL D]
  axp152.set_aldo1(2500);//[FPGA PLL A]
  axp152.set_dcdc4(3300);//[POWER_OUTPUT]
 
  axp152.set_dcdc3(3300);//[FPGA BK4][Adjustable]
  axp152.set_aldo2(3300);//[FPGA BK3][Adjustable]
  axp152.set_dldo1(3300);//[FPGA BK7][Adjustable]
  axp152.set_dldo2(3300);//[FPGA BK5][Adjustable]
 
  MX_GPIO_Init();
  MX_USART2_UART_Init();
  usart2.initialize(115200);
 
  while (1)
  {
        if(systick._500ms_flag == 1){
            systick._500ms_flag = 0;
            LED_ON;
            lm75.read();  //读取温度
            usart2.printf("\x0c");
            usart2.printf("\033[1;32;40m");
            usart2.printf("Hello,I am iCore4T!\r\n\r\n");       
            usart2.printf("[TEMP ] %4.2f\r\n",lm75.temperature_value);
//输出温度数值        
            LED_OFF;        
        }
  }
}

2. LM75A读取温度函数

static float read(void)
{
    union{
        unsigned char buf[2];
        short int value;
    }temp;
    float f;
    unsigned char c;
 
    i2c_b.read_nbyte(LM75,0,temp.buf,2);
 
    c = temp.buf[0];
    temp.buf[0] = temp.buf[1];
    temp.buf[1] = c;
 
    f = temp.value;
    f /= (float)32.0;    //寄存器数值右移5位
    f *= (float)0.125;   //温度值(℃)=(Temp数据)×0.125℃(精度)
 
    lm75.temperature_value = f;
    return f;
}

五、 实验步骤

  1. 把仿真器与iCore4T的SWD调试口相连(直接相连或者通过转接器相连);
  2. 把iCore4T通过Micro USB线与计算机相连,为iCore4T供电;
  3. 打开Keil MDK 开发环境,并打开本实验工程;
  4. 烧写程序到iCore4T上;
  5. 也可以进入Debug 模式,单步运行或设置断点验证程序逻辑。

六、 实验现象

  • 通过终端显示出LM75A所测温度。

icore4t_9.txt · 最后更改: 2022/03/22 10:39 由 sean