当前位置: 首页 > article >正文

雅特力AT32 I2C实战:从零构建EEPROM存储系统

1. 硬件连接与基础配置第一次玩AT32的I2C外设时我对着开发板上的SCL和SDA引脚发呆了半天。后来发现硬件连接其实就三个要点上拉电阻、开漏输出、引脚复用。以AT32F403A开发板为例I2C1的SCL(PB6)和SDA(PB7)需要配置为复用开漏模式记得接上4.7K上拉电阻——这个值我实测过在标准模式(100kHz)下最稳定。硬件初始化代码要特别注意时钟使能顺序// 使能GPIOB和I2C1时钟 crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE); crm_periph_clock_enable(CRM_I2C1_PERIPH_CLOCK, TRUE); // 配置PB6(SCL)和PB7(SDA) gpio_init_type gpio_init_struct; gpio_default_para_init(gpio_init_struct); gpio_init_struct.gpio_mode GPIO_MODE_MUX; gpio_init_struct.gpio_out_type GPIO_OUTPUT_OPEN_DRAIN; gpio_init_struct.gpio_pull GPIO_PULL_UP; gpio_init_struct.gpio_pins GPIO_PINS_6 | GPIO_PINS_7; gpio_init(GPIOB, gpio_init_struct);2. I2C外设初始化详解AT32的I2C初始化比STM32复杂些关键是要配置时钟控制寄存器(I2C_CLKCTRL)。这里有个坑官方库里的i2c_init()函数需要传入数字滤波值和时钟配置值。我推荐使用Artery提供的配置工具生成时钟参数比如100kHz标准模式对应0x60E02E2E。实测过的初始化代码i2c_init_type i2c_init_struct; i2c_default_para_init(i2c_init_struct); i2c_init_struct.clock_speed I2C_CLOCK_SPEED_STANDARD; i2c_init_struct.digital_filter 0x0F; // 数字滤波值 i2c_init_struct.clock_ctrl 0x60E02E2E; // 100kHz配置 i2c_init(I2C1, i2c_init_struct);3. EEPROM读写实战我用AT24C02做测试时发现必须遵循EEPROM的页写入时序。每次写入后要加5ms延时AT24C02的典型写入时间。读操作则需要注意先发送设备地址写标志再发送存储地址最后重启通信改为读模式。完整的页写入函数示例void eeprom_page_write(uint16_t addr, uint8_t *data, uint8_t len) { while(i2c_flag_get(I2C1, I2C_BUSYF_FLAG)); // 等待总线空闲 i2c_start_generate(I2C1); // 发送起始条件 while(!i2c_flag_get(I2C1, I2C_TDIS_FLAG)); i2c_data_send(I2C1, 0xA0); // 设备地址 写 while(!i2c_flag_get(I2C1, I2C_TDIS_FLAG)); i2c_data_send(I2C1, addr); // 存储地址 for(uint8_t i0; ilen; i){ while(!i2c_flag_get(I2C1, I2C_TDIS_FLAG)); i2c_data_send(I2C1, data[i]); } i2c_stop_generate(I2C1); // 发送停止条件 delay_ms(5); // 必须的写入等待 }4. 三种传输模式对比轮询模式最简单但效率低适合低速场景。中断模式能释放CPU资源但要注意中断优先级设置——我遇到过因为优先级配置不当导致通信失败的情况。DMA模式最省心适合大数据量传输配置时要注意DMA通道与I2C事件的配合。DMA模式配置关键点// 使能DMA时钟 crm_periph_clock_enable(CRM_DMA1_PERIPH_CLOCK, TRUE); // 配置DMA通道 dma_init_type dma_init_struct; dma_default_para_init(dma_init_struct); dma_init_struct.direction DMA_DIR_MEMORY_TO_PERIPHERAL; dma_init_struct.memory_inc_enable TRUE; dma_init_struct.peripheral_data_width DMA_PERIPHERAL_DATA_WIDTH_BYTE; dma_init_struct.memory_data_width DMA_MEMORY_DATA_WIDTH_BYTE; dma_init(DMA1_CHANNEL6, dma_init_struct); // 以I2C1_TX为例 // 使能I2C的DMA请求 i2c_dma_enable(I2C1, I2C_DMA_REQUEST_TX, TRUE);5. 常见问题排查调试I2C时我的必备工具是逻辑分析仪。这几个错误我踩过坑无ACK响应检查设备地址是否正确7位地址要左移1位总线锁死有时需要重新初始化I2C外设数据错位检查时钟配置是否符合从设备要求一个实用的总线恢复函数void i2c_bus_recover(void) { GPIOB-pins GPIO_PINS_6 | GPIO_PINS_7; // 强制拉高 gpio_init_struct.gpio_mode GPIO_MODE_OUTPUT; gpio_init(GPIOB, gpio_init_struct); // 模拟I2C总线恢复时序 for(uint8_t i0; i9; i){ GPIOB-pins GPIO_PINS_6; delay_us(5); GPIOB-pins GPIO_PINS_6 | GPIO_PINS_7; delay_us(5); } // 恢复GPIO配置 gpio_init_struct.gpio_mode GPIO_MODE_MUX; gpio_init(GPIOB, gpio_init_struct); }6. 性能优化技巧通过实测发现开启I2C的**快速模式(400kHz)**需要优化PCB布局。如果走线较长建议缩短SCL/SDA走线长度减小上拉电阻值我用2.2K在400kHz下稳定启用I2C的数字滤波功能DFLT值设为0x0F时钟配置工具的参数解读参数说明标准模式值快速模式值SCLHSCL高电平周期0x600x1ESCLLSCL低电平周期0xE00x3CSDAD数据保持时间0x020x01SCLD数据建立时间0x0E0x077. 完整项目集成在实际项目中我习惯将EEPROM操作封装成独立模块。这个头文件接口很好用// eeprom.h #define EEPROM_ADDR 0xA0 typedef enum { EEPROM_OK, EEPROM_BUSY, EEPROM_ERROR } eeprom_status_t; eeprom_status_t eeprom_write(uint16_t addr, uint8_t *data, uint16_t len); eeprom_status_t eeprom_read(uint16_t addr, uint8_t *data, uint16_t len);配合FreeRTOS使用时记得添加互斥锁保护I2C总线SemaphoreHandle_t i2c_mutex xSemaphoreCreateMutex(); void task_eeprom(void *param) { if(xSemaphoreTake(i2c_mutex, pdMS_TO_TICKS(100)) pdTRUE){ eeprom_read(0x00, buffer, 32); xSemaphoreGive(i2c_mutex); } }

相关文章:

雅特力AT32 I2C实战:从零构建EEPROM存储系统

1. 硬件连接与基础配置 第一次玩AT32的I2C外设时,我对着开发板上的SCL和SDA引脚发呆了半天。后来发现,硬件连接其实就三个要点:上拉电阻、开漏输出、引脚复用。以AT32F403A开发板为例,I2C1的SCL(PB6)和SDA(PB7)需要配置为复用开漏…...

红外通信不止遥控器:手把手教你用2ASK调制实现语音+温度数据同传

红外通信不止遥控器:手把手教你用2ASK调制实现语音温度数据同传 红外通信技术早已渗透到我们生活的方方面面,从电视遥控器到智能家居控制,但它的潜力远不止于此。今天,我们将一起探索如何利用2ASK调制技术,构建一个能够…...

Pixel Mind Decoder 自动化测试脚本编写:Python单元测试与集成测试指南

Pixel Mind Decoder 自动化测试脚本编写:Python单元测试与集成测试指南 1. 为什么需要自动化测试 在开发基于Pixel Mind Decoder的应用时,自动化测试是确保代码质量和功能稳定性的关键环节。想象一下,当你修改了一行代码,却不知…...

Asian Beauty Z-Image Turbo 微信小程序前端开发:实时图像生成与分享

Asian Beauty Z-Image Turbo 微信小程序前端开发:实时图像生成与分享 最近在捣鼓一些有意思的AI应用,发现把大模型的能力搬到移动端,特别是像微信小程序这样的轻量级平台上,能玩出很多新花样。今天想和大家聊聊,怎么给…...

突破直播限制:OBS多平台同步推流插件完全指南

突破直播限制:OBS多平台同步推流插件完全指南 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 你是否曾为需要同时在多个平台直播而烦恼?手动切换推流、重复配置参…...

FRCRN常见错误代码排查手册:从403 Forbidden到CUDA错误

FRCRN常见错误代码排查手册:从403 Forbidden到CUDA错误 部署和使用FRCRN进行语音降噪时,遇到各种报错是常有的事。这些错误信息往往让人一头雾水,从网络权限的“403 Forbidden”到让人头疼的CUDA问题,每一个都可能让你卡上半天。…...

3分钟搞定风扇噪音!FanControl让你的电脑从此安静如初

3分钟搞定风扇噪音!FanControl让你的电脑从此安静如初 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa…...

IP5385:一颗芯片实现30W-100W全协议兼容的移动电源革命

1. 一颗芯片如何颠覆移动电源行业? 还记得五年前出门必带的"充电宝三件套"吗?充电宝本体、专用充电线、还有那个永远找不到的充电头。现在我的背包里只需要一根C to C线,就能给手机、笔记本甚至无人机快速回血——这背后正是IP5385…...

WarcraftHelper终极指南:让经典魔兽争霸3在现代电脑上流畅运行的完整方案

WarcraftHelper终极指南:让经典魔兽争霸3在现代电脑上流畅运行的完整方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你是否还在为魔兽…...

暗黑破坏神2存档编辑器完整指南:5分钟打造完美游戏体验

暗黑破坏神2存档编辑器完整指南:5分钟打造完美游戏体验 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 暗黑破坏神2存档编辑器(d2s-editor)是一款专为单机玩家设计的免费开源工具,…...

告别手动刷写!用CANoe CAPL脚本全自动搞定UDS Bootloader(附完整脚本框架)

构建汽车电子自动化测试框架:基于CAPL的UDS Bootloader全流程解决方案 在汽车电子开发领域,软件刷写效率直接影响到产品迭代速度和质量保障水平。传统手动操作不仅耗时费力,还容易因人为因素导致错误。本文将深入探讨如何利用CANoe的CAPL脚本…...

2026奇点智能大会前瞻:为什么92%的AI工程团队将在Q3前重构Agent框架?(Gartner未公开预警报告首曝)

第一章:2026奇点智能技术大会:大模型Agent框架 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次将大模型Agent框架确立为核心技术范式,聚焦于可推理、可规划、可协作的自主智能体系统设计。与传统微调或提示工程不同&#xff0c…...

GDI+图片操作全解析:从Bitmap锁定到Graphics绘制的正确姿势

GDI图像处理深度指南:解锁Bitmap与Graphics的高效协作 在Windows窗体应用开发中,图像处理是绕不开的核心需求。许多开发者在使用GDI时都遇到过这样的场景:从文件加载图片后,尝试修改并保存回原文件时,系统抛出"GD…...

5分钟掌握Android设备安全检测:Play Integrity API Checker全面指南

5分钟掌握Android设备安全检测:Play Integrity API Checker全面指南 【免费下载链接】play-integrity-checker-app Get info about your Device Integrity through the Play Intergrity API 项目地址: https://gitcode.com/gh_mirrors/pl/play-integrity-checker-…...

告别ros2 run!用Launch文件一键启动你的多机器人项目(附YAML配置模板)

告别ros2 run!用Launch文件一键启动你的多机器人项目(附YAML配置模板) 在ROS 2开发中,手动逐个启动节点的方式就像用螺丝刀组装汽车——理论上可行,但效率低下且容易出错。当项目规模扩展到多个机器人协同工作时&#…...

通信原理之SystemView下短波16QAM调制与解调系统仿真研究:电路构建、参数设定与结果...

通信原理 systemview 16QAM调制与解调系统的仿真 16QAM调制解调系统与解调系统的仿真 用SystemView建立一个16QAM调制解调器电路,分析理解系统的各个模块功能,观察波形图 判断是不是实现了16QAM调制解调系统功能 基本要求: (1)在SystemView软 件中构建短波16QAM仿真…...

2024HW 天眼NGSOC告警分析实战指南:从协议字段到日志检索

1. 天眼与NGSOC系统入门:安全工程师的"火眼金睛" 第一次接触天眼和NGSOC系统时,我完全被满屏的告警信息搞懵了——就像突然被扔进一个满是仪表的飞机驾驶舱。但用顺手后发现,这两个系统简直是安全分析师的"火眼金睛"。天…...

Alibaba DASD-4B Thinking 对话工具在时序预测中的应用:结合LSTM模型的分析与报告生成

Alibaba DASD-4B Thinking 对话工具在时序预测中的应用:结合LSTM模型的分析与报告生成 1. 引言 想象一下这个场景:你的团队刚刚用LSTM模型跑完了下个季度的销量预测,屏幕上那条起伏的曲线清晰地告诉你,三月份会有一个销售高峰&a…...

中药小分子靶点筛选实战:8种主流技术优缺点对比与选型指南

中药小分子靶点筛选实战:8种主流技术优缺点对比与选型指南 在中药现代化研究的浪潮中,小分子靶点筛选技术正成为连接传统药效与现代药理的关键桥梁。不同于西药研发中常见的单靶点策略,中药小分子往往展现出"多靶点、多通路"的复杂…...

重新定义知识管理:从静态笔记到动态数据思维的范式转移

重新定义知识管理:从静态笔记到动态数据思维的范式转移 【免费下载链接】obsidian-dataview A data index and query language over Markdown files, for https://obsidian.md/. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-dataview Obsidian Da…...

如何用BOTW存档编辑器轻松修改《塞尔达传说:旷野之息》游戏数据

如何用BOTW存档编辑器轻松修改《塞尔达传说:旷野之息》游戏数据 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 你是否曾在海拉鲁大陆的冒险中&#xf…...

WarcraftHelper:魔兽争霸3免费优化插件完整指南与配置教程

WarcraftHelper:魔兽争霸3免费优化插件完整指南与配置教程 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在现代电脑上频…...

庖丁解牛:从Linux内核源码看NandFlash ECC校验的位运算艺术

1. 为什么需要ECC校验 NandFlash作为嵌入式系统中最常用的存储介质之一,其物理特性决定了它存在一定的位翻转概率。想象一下,你正在用笔记本记录重要会议内容,突然发现某个字的笔画出现了错误 - 这就是NandFlash面临的现实问题。位翻转可能由…...

【多智能体控制】领导者-跟随者的无人机群编队控制仿真(碰撞检测、轨迹规划)【含Matlab源码 15321期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab领域博客之家💞&…...

GoldHEN Cheats Manager:PS4游戏修改功能的一站式解决方案

GoldHEN Cheats Manager:PS4游戏修改功能的一站式解决方案 【免费下载链接】GoldHEN_Cheat_Manager GoldHEN Cheats Manager 项目地址: https://gitcode.com/gh_mirrors/go/GoldHEN_Cheat_Manager 在PlayStation 4的定制化游戏体验领域,GoldHEN C…...

微生物组数据分析难题如何解决?curatedMetagenomicData实战指南深度解析

微生物组数据分析难题如何解决?curatedMetagenomicData实战指南深度解析 【免费下载链接】curatedMetagenomicData Curated Metagenomic Data of the Human Microbiome 项目地址: https://gitcode.com/gh_mirrors/cu/curatedMetagenomicData 在人类微生物组研…...

从‘找茬游戏’到智能识别:一文读懂VM BLOB分析里的连通性、阈值与特征筛选

从‘找茬游戏’到智能识别:解密BLOB分析中的连通性、阈值与特征筛选 想象一下,你正在玩一款经典的"找茬游戏"——在两幅看似相同的图片中,需要快速识别出细微的差异点。这种视觉搜索的过程,与机器视觉中的BLOB分析有着惊…...

基于matlab瞬态三角哈里斯鹰算法TTHHO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

3步实现CS:GO皮肤自定义:nSkinz开源工具深度解析

3步实现CS:GO皮肤自定义:nSkinz开源工具深度解析 【免费下载链接】nSkinz Skin changer for CS:GO 项目地址: https://gitcode.com/gh_mirrors/ns/nSkinz 你是否曾经羡慕CS:GO玩家手中那些炫酷的稀有皮肤,却又不想花费数百美元购买?或…...

BIM设计师必备:Revit等高线地形建模的5个高效技巧与常见问题解决

BIM设计师必备:Revit等高线地形建模的5个高效技巧与常见问题解决 在BIM设计领域,地形建模往往被视为项目的基础性工作,却直接影响着后续设计的准确性和效率。对于经常处理复杂场地的景观设计师、城市规划师和土木工程师来说,Revi…...