用户工具

站点工具


icore4tx_10
银杏科技有限公司旗下技术文档发布平台
技术支持电话0379-69926675-801
技术支持邮件Gingko@vip.163.com
版本 日期 作者 修改内容
V1.0 2020-07-27 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通信实验——读写测试EEPROM

一、 实验目的与意义

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

二、 实验设备及平台

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

三、 实验原理

1.EEPROM简介

  • EEPROM (Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器。是一种掉电后数据不丢失的存储芯片。 EEPROM 可以在电脑上或专用设备上擦除已有信息,重新编程。
  • 由于EPROM操作的不便,后来出的主板上BIOSROM芯片大部分都采用EEPROM。EEPROM的擦除不需要借助于其它设备,它是以电子信号来修改其内容的,而且是以Byte为最小修改单位,不必将资料全部洗掉才能写入,彻底摆脱了EPROMEraser和编程器的束缚。
  • EEPROM在写入数据时,仍要利用一定的编程电压,此时,只需用厂商提供的专用刷新程序就可以轻而易举地改写内容,所以,它属于双电压芯片。借助于EEPROM芯片的双电压特性,可以使BIOS具有良好的防毒功能,在升级时,把跳线开关打至“on”的位置,即给芯片加上相应的编程电压,就可以方便地升级;平时使用时,则把跳线开关打至“off”的位置,防止CIH类的病毒对BIOS芯片的非法修改。所以,至今仍有不少主板采用EEPROM作为BIOS芯片并作为自己主板的一大特色。
  • 传统的单片机存贮结构,一般要由ROM、RAM组成。随着存贮器技术的发展.市场上推出电可擦除可编程只读存贮器,即EEPROM器件。该类器件基于FLOTOX(floatin~gatetunneling~Oxide)结构.根据Fowler—Nordheim效应来完成数据的擦除或写入。因而具备联机可读、可写的特性,以及掉电之后的非易失性。EEPROM存贮器件的出现,为单片机存贮体的选择提供了新的设计方案

2.原理图:

3.时序图

四、 实验程序

=== 1. 主函数 ===

int main(void)  
{  
    int i;  
int temp;  
    HAL_Init();  
   SystemClock_Config();  
 
    i2c.initialize();  
    axp152.initialize();  
    axp152.set_dcdc1(3500);//[ARM & FPGA]
    axp152.set_dcdc2(1200);//[FPGA INT]
    axp152.set_dcdc3(3300);//[DCOUT3]
    axp152.set_dcdc4(3300);//[DCOUT4]
 
    axp152.set_aldo1(3300);//[BK3]
    axp152.set_aldo2(3300);//[ALDOOUT2]
    axp152.set_dldo1(3300);//[BK0]
    axp152.set_dldo2(3300);//[BK1]
    HAL_Delay(200);
 
   MX_GPIO_Init();  
     MX_USART2_UART_Init();  
    usart2.initialize(115200);  
    usart2.printf("\x0c");                         //清屏
    usart2.printf("\033[1;32;40m");                //设置终端字体为绿色  
    usart2.printf("Hello,I am iCore4TX!\r\n\r\n");         
    for(i = 0;i < 512;i ++){  
        eeprom.write(i ,i);  
    }  
    for(i = 0;i < 512;i ++){  
        temp = eeprom.read(i);  
        if(temp != i % 256){  
            usart2.printf("EEPROM ERROR! %d,%d\r\n",temp,i);  
            while(1){  
                LED_ON;  
                HAL_Delay(500);  
                LED_OFF;  
                HAL_Delay(500);  
            }     
        }  
}  
    usart2.printf("EEPROM TEST OK!\r\n");     
    LED_ON;  
    while (1)  
    {  
    }  
}

2. EEPROM读写函数

static int  
write(int addr, unsigned char dat)  
{  
    int i;  
    unsigned char madd;  
    if (addr > 255) { //select block 0~255 / 256 ~ 511  
        madd = _24LC04B | 0X02;  
        addr -= 256;  
    }else {  
        madd = _24LC04B;  
    }  
    i2c.write_nbyte(madd, addr, &dat, 1);  
    for (i = 0; i < 300000; i++) ;  
    return 0;  
}  
static int  
write_page(int addr, unsigned char * buffer)  
{  
    int i;  
    unsigned char madd;  
    if (addr > 255) { //select block 0~255 / 256 ~ 511  
        madd = _24LC04B | 0X02;  
        addr -= 256;  
    }else {  
        madd = _24LC04B;  
    }  
    i2c.write_nbyte(madd, addr, buffer, 16);  
    for (i = 0; i < 300000; i++) ;  
    return 0;  
}  
static unsigned char  
read(int addr)  
{  
    unsigned char madd;  
    unsigned char dat;  
    if (addr > 255) { //select block 0~255 / 256 ~ 511  
        madd = _24LC04B | 0X02;  
        addr -= 256;  
    }else {  
        madd = _24LC04B;  
    }  
    i2c.read_nbyte(madd, addr, &dat, 1);  
    return dat;  
}

五、 实验步骤

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

六、 实验现象

EEPROM读写测试成功,则在终端显示出“EEPROM TEST OK!”。

icore4tx_10.txt · 最后更改: 2022/04/01 11:22 由 sean