
基于stm32的 iic通讯的 led显示 学习分享
发布日期:2021-05-19 23:38:28
浏览次数:19
分类:精选文章
本文共 1409 字,大约阅读时间需要 4 分钟。
LED显示与OLED屏幕实现之路
最近,我的技术探索又一次让我惊叹于万物的神奇。刚刚发现,四线就能实现LED显示,简直令人心颤。于是,我决定记录实现过程,分享点滴心得。
硬件选择与准备
在硬件设备上,我选择了STM32F1C8T6开发板。这是一个功能强大的低功耗单片机,价格实惠,且板子上已配备OLED显示模块。虽然OLED模块通常需要额外购买,但考虑到最小化系统,我选择两根LED显示线,考虑到开发过程中可能需要多次更换,最终决定增加两根备用线以确保开发过程不受限。
Oled模块连接与通信方式选择
OLED模块一般采用SPI或IIC通信方式。在硬件连接上,我将OLED模块的GND端接地,VCC接3.3V电源(注意:5V不会被烧坏)。单片机的时钟(IIC_SCL)和数据(IIC_SDA)脚分别连接到开发板上的PB6和PB7引脚。通过查阅开发板引脚图,我找到对应接口,确保焊接正确。
对于通信方式,IIC和SPI都是可行选择。虽然IIC接线稍复杂,但由于开发工具的支持和丰富的库函数,IIC通信更加简单。此外,SPI接线原理清晰,硬件更简单,但程序实现相对复杂。因此,我决定采用IIC通信方式,利用现有开源库加快开发进度。
软件编码与调试
在软件开发过程中,我参考并借鉴了正point原子设备的IIC通信例程。通过不断调试和测试,最终完成了以下关键函数:
// IIC通信发送函数void IIC_Send_Byte(u8 txd) { u8 t; SDA_OUT(); IIC_SCL = 0; for(t = 0; t < 8; t++) { IIC_SDA = (txd & 0x80) >> 7; // 移位并获取最高位 txd <<= 1; // 更新传输缓冲 delay_us(2); IIC_SCL = 1; delay_us(2); IIC_SCL = 0; delay_us(2); }}// IIC通信读取函数u8 IIC_Read_Byte(unsigned char ack) { unsigned char i; SDA_IN(); for(i = 0; i < 8; i++) { IIC_SCL = 0; delay_us(2); IIC_SCL = 1; if (READ_SDA) { delay_us(1); } } if (!ack) { IIC_NAck(); } else { IIC_Ack(); } return SDA_IN_GET(); // 读取最终值}
通过反复实验,我成功实现了与OLED屏幕的通信,能够进行单个字节的发送与接收操作。这为后续画图和显示功能奠定了基础。
展望与反思
软件与硬件的实现只是一小步支付,仍需继续深耕。
总的来说,这次开发过程让我对IIC通信有了更深入的理解,也让我更加熟悉硬件与软件协同工作的原理。正如有人所说,电子开发是一场永无止境的探索之旅,期待能在这条道路上不断挑战自我,创造出更多精彩的作品。
建稿日期:2020年11月25日
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月18日 11时05分02秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
numpy.vstack
2019-03-17
numpy.frombuffer()
2019-03-17
文件结束符EOF
2019-03-17
Latex 错误集合
2019-03-17
Python的内置函数(四十一)、 index()
2019-03-17
Python 代码占多行
2019-03-17
TypeError: string indices must be integers
2019-03-17
卷积神经网络的工程技巧总结
2019-03-17
Python的内置函数(十六)、strip()
2019-03-17
Python字符串操作之字符串分割与组合
2019-03-17
tf.parse_single_example()
2019-03-17
latex表示极限
2019-03-17
tf.tuple
2019-03-17
C++实现二叉树的最近公共祖先
2019-03-17
CentOS7安装mysql5.6
2019-03-17
windows下通过cmd杀死进程的方法
2019-03-17
开放式系统互联模型(网络的七层架构)
2019-03-17