基于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日

上一篇:IIC通信 简单理解 学到就是赚到
下一篇:linux基本命令

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月18日 11时05分02秒