I2C与RFID技术:STM32固件库修改解析
需积分: 5 72 浏览量
更新于2024-08-06
收藏 198KB PDF 举报
"I2C方面的说明-射频识别 iso-iec_cd-18000-6c中文版详细简析"
本文主要探讨了在使用I2C通信协议时的一些注意事项,特别是在针对射频识别(RFID)系统ISO/IEC CD 18000-6C的实现中,以及在GD32国产芯片上的软件移植问题。
在I2C方面,主要涉及了两个关键知识点:
1. **I2C寻址和事件检查的修改**:
在描述中提到,当使用I2C编程时,需要修改固件库`stm32f10x_i2c.h`中的两个宏定义,将原本的`I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED`和`I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED`的值更改为去掉高位字节的值。这是因为在某些情况下,原有的宏定义可能与特定硬件配置不符,导致I2C通信中的地址匹配和主发送模式选择事件检测出现问题。修改这两个宏可以更准确地检测到I2C事件,确保通信的正确性。
2. **I2C事件检查函数`I2C_CheckEvent`的更新**:
文档指出,在使用旧版本V3.5.0之前的固件库时,需要更新`I2C_CheckEvent`函数,以适应新的I2C状态检查需求。函数的主要作用是检查I2C控制器的状态寄存器,判断是否发生了指定的I2C事件。通过对状态寄存器的读取和比较,决定是否返回成功状态。在更新后的函数中,会更加精确地检测到I2C事件,避免因错误检查导致的通信故障。
在软件移植到GD32芯片时,有以下几点需要注意:
1. **HSE启动时间宏定义的调整**:
GD32与STM32在外部高速晶振(HSE)的启动时间设置上存在差异。在V3.x库中,HSE启动超时时间宏`HSE_STARTUP_TIMEOUT`被定义在`xxx32f10x.h`头文件中,而在早期版本中,它位于`xxx32f10x_rcc.c`。由于GD32与STM32的晶振电路设计不同,需要调整这个宏的值,例如将超时时间设为`0xFFFF`,以确保HSE在GD32上能正常启动。虽然在某些情况下不修改也能运行,但为了保证系统的稳定性和兼容性,建议还是进行修改。
2. **代码执行速度的差异**:
GD32芯片采用了专利技术,提高了相同工作频率下的代码执行效率。因此,从STM32移植过来的代码,如包含循环延迟的函数,其实际延迟时间会缩短。比如,一个简单的`For`循环延迟函数在GD32上执行速度更快,可能导致延时时间不足。对于对时间精度有要求的应用,需要重新评估并调整这些延时函数。
3. **I2C响应检测的适配**:
在某些情况下,如使用GPIO模拟I2C通信,检查应答信号的函数可能在GD32上无法正常工作,因为代码执行速度的差异可能导致应答检测的时机不准确。例如,客户反馈的`CheckACK`函数可能在GD32上未能正确检测到应答,这需要根据GD32的执行速度调整相关逻辑,确保I2C通信的可靠性。
移植I2C相关的代码到GD32芯片时,不仅要关注硬件层面的兼容性,还需要考虑软件执行效率的影响,适当调整代码以适应新平台的特性。同时,对晶振配置、事件检测函数和时间延迟计算等细节进行修正,以确保在GD32芯片上的功能正确性和稳定性。
117 浏览量
2022-09-24 上传
2022-09-20 上传
2011-07-28 上传
点击了解资源详情
2011-08-15 上传
2018-11-28 上传
2021-03-09 上传
2020-01-11 上传
淡墨1913
- 粉丝: 32
- 资源: 3812
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章