使用国产单片机AT32的硬件I2C的一些心得分享

写在前面的话

我以前很少写过博客,很少提笔创作,包括其他公众平台和短视频平台都很少发表过个人作品和文章。我心中很想把技术探索、项目实操中的那些心得包括自己其他的看法和感悟记录下来,可无奈由于种种原因,计划一次次落空,至今还没写下一个字。
最近,契机源于我着手实操的一个小小的实验 —— 基于 AT32F423 芯片,利用硬件 I2C 点亮了 OLED-I2C-1.3 寸屏幕。过程中收获颇丰,便琢磨着围绕这次经历写上几篇文章,既是复盘总结,也算抛砖引玉。
我知道我的文笔还有很大的进步空间,技术解读上或许也不够深入,所以衷心地希望广大网友、业内前辈以及工程师朋友们留下宝贵的批评与建议。
注:本篇设计到的一些MCU编程基础和硬件基础需要自行去查阅、学习。

想法萌生与遇见的问题

在我以前的开发中,包括我相信很多网友要用I2C的时候,大部分情况还是会选择软件I2C,方便、资料多。但是遇见一些大工程,还有部分高速的场景下,还是会选择硬件I2C,就是调试起来麻烦,基于这些观点我就有了尝试使用硬件I2C的想法,也决定支持国产单片机,于是就拿手上有的AT32F423-START板以及常用的中景园OLED模块尝试了一波。

硬件I2C的配置

使用雅特力AT32他们的配置工具进行辅助配置,可以提高效率,不过仅仅只能作为辅助,具体使用还是要自己配置、修改,包括工程模板强烈建议自己建立。具体的参数和一些配置方法也强烈建议阅读他们的手册。
AT32_WorkBench
我个人只是拿配置工具配置好时钟后,copy到建立的at32f423_clock.c中。
时钟配置
然后进行gpio的配置。此处使用的I2C1,PB6和PB7,根据雅特力官方的I2C应用手册,它们是在MUX4复用器上。
gpio的配置由于I2C使用的总线结构,特别是硬件I2C强烈建议使用复用开漏输出,以免产生线与短路,该模块已经使用了外部的4.7kΩ的上拉电阻,以后遇见其他没有上拉电阻或者外部上拉电阻不合适的模块可以配置内部上拉OLED_GPIO_InitStruce.gpio_mode = GPIO_PULL_UP;
I2C的配置,I2C的速率不建议太快。

(此处踩了坑,后面再讲。)
OLED模块在网上有很多开源的,教程也很多,学了OLED模块后(当然强烈建议自己写一个程序),下载一套OLED的驱动,适当修改后直接调用api函数,根据自己想要的图片文字取模后在main.c里面测试。
注:以下是正确的代码!

void oled_writecommand(uint8_t command)
{
   
	i2c_status_type I2C_Status;
#ifdef OLED_USE_SW_I2C
	oled_i2c_start();    //I2C initiation,start
	oled_i2c_sendbyte(0x3C);    //The address of the I2C slave sending the OLED
	oled_i2c_sendbyte(0x00);    //The 0x00 indicates a write command
	oled_i2c_sendbyte(command);    //Write the specified 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LyKenny

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值