APP下载

STM32-MCU片内IIC接口的驱动程序设计

2018-08-31河南驰诚电气股份有限公司怯肇乾

电子世界 2018年16期
关键词:指令

河南驰诚电气股份有限公司 朱 斌 张 磊 怯肇乾

1 引言

意法半导体STM(STMicroelectronics)的Cortex-M系列微控制器MCU(Micro Control Unit),性价比高,应用广泛。然而,其片内集成的硬件IIC总线(Inter-Integrated Circuit)接口运用,几乎是共认的“鸡肋”。此类MCU外接IIC设备,如数据随机存储器RAM(Ramdom Access Memory)、传感器Sensor、液晶显示模块LCM()等,很多工程师,宁可用通用输入输出端口GPIO(General Purpose Input Output)模拟实现IIC通信,也不用其片内集成的IIC接口。

选用片内IIC接口,即使采用STM提供的库驱动函数,程序卡死或跑飞,是“家常便饭”。GPIO模拟IIC通信,尽管容易实现,但它耗用MCU资源多,形成的IIC时序不规范,而且为保证IIC时序的完整性而在通信期间关闭系统中断又会严重影响嵌入式软件体系的整体调度性能。

GPIO模拟IIC“得不偿失”,闲置片内IIC“弃之可惜”。深入研究STM-MCU-IIC时序,借鉴GPIO模拟和STM库函数通信经验,充分运用并简化片内IIC驱动通信,势在必行。

2 片内IIC驱动现状[1][4]

选用片内IIC接口,采用STM-IIC驱动库函数或自编驱动,进行IIC总线主从通信,通常MCU为主,设备为从,很容易捕捉发现:发送数据没有问题,接收多个数据没有问题,读入1个数据,IIC总线停止。对于RAM等外设的访问,多读几个数据很容易回避读入1个数据时的“尴尬”,但必需读入1个字节的寄存器时,就不得不“面对”了。

图1下面给出的是示波器测量空气质量传感器CSS811的配置与状态回读时序,CSS811作为从机,地址为0x5A,对CSS811内部寄存器0x01地址写入0x38完成配置,之后对状态寄存器0x00回读1 字节,即:发送0x01、0x38完成配置,发送0x00启动状态读,之后读入1 字节。

图1说明,按1个字读,没有结果;按2个以上字节读,数据线拉低,致使IIC总线停止。……

登录APP查看全文

猜你喜欢

指令
听我指令:大催眠术
ARINC661显控指令快速验证方法
LED照明产品欧盟ErP指令要求解读
杀毒软件中指令虚拟机的脆弱性分析
巧用G10指令实现椭圆轮廓零件倒圆角
中断与跳转操作对指令串的影响
基于汇编指令分布的恶意代码检测算法研究
一种基于滑窗的余度指令判别算法
欧盟修订电气及电子设备等产品安全规定
MAC指令推动制冷剂行业发展