Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
I2C_IIC
ssd1306
u8g2
【NXP-MCXA156】恩智浦A156上的 IIC(硬件) 实践
发布于 2025-02-28 23:34:57 浏览:19
订阅该版
[tocm] # 写在前面 关于恩智浦156开发板的介绍、上手以及代码仓信息,官方已经写的很具体了,详见[NXP FRDM-MCXA156 上手指南](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/tutorial/quick-start/frdm_mcxa156/quick-start "NXP FRDM-MCXA156 上手指南")。env工具使用最新的2.0.0版,官网下载即可。 相关的PCB原理图以及芯片使用手册,详见G39OL1的[【FRDM-MCXA156测评】- UART模块](https://club.rt-thread.org/ask/article/ab4e9d33f2423a7c.html "【FRDM-MCXA156测评】- UART模块"),这里不再赘述。 # 一、实现内容 使用硬件I2C驱动SSD1306模块,根据原理图选择P3_27(I2C3_SCL)、P3_28(I2C3_SDA)作为控制引脚,进行u8g2以及SSD1306驱动测试。    # 二、引脚配置 找到\RT-Thread\rt-thread\bsp\nxp\mcx\mcxa\frdm-mcxa156\board\MCUX_Config\board路径下的pin_mux.c,添加如下引脚配置代码,这里把BSP_USING_I2C3宏也加入,后面改一下Kconfig,就可以使用ENV工具自由配置了。 ```c #ifdef BSP_USING_I2C3 /* LPI2C3 peripheral is released from reset */ RESET_ReleasePeripheralReset(kLPI2C0_RST_SHIFT_RSTn); const port_pin_config_t port3_28_pin51_config = {/* Internal pull-up resistor is enabled */ .pullSelect = kPORT_PullUp, /* Low internal pull resistor value is selected. */ .pullValueSelect = kPORT_LowPullResistor, /* Fast slew rate is configured */ .slewRate = kPORT_FastSlewRate, /* Passive input filter is disabled */ .passiveFilterEnable = kPORT_PassiveFilterDisable, /* Open drain output is disabled */ .openDrainEnable = kPORT_OpenDrainDisable, /* Low drive strength is configured */ .driveStrength = kPORT_LowDriveStrength, /* Normal drive strength is configured */ .driveStrength1 = kPORT_NormalDriveStrength, /* Pin is configured as LPI2C3_SDA */ .mux = kPORT_MuxAlt2, /* Digital input enabled */ .inputBuffer = kPORT_InputBufferEnable, /* Digital input is not inverted */ .invertInput = kPORT_InputNormal, /* Pin Control Register fields [15:0] are not locked */ .lockRegister = kPORT_UnlockRegister}; /* PORT3_28 (pin 51) is configured as LPI2C3_SCL */ PORT_SetPinConfig(PORT3, 28U, &port3_28_pin51_config); const port_pin_config_t port3_27_pin52_config = {/* Internal pull-up resistor is enabled */ .pullSelect = kPORT_PullUp, /* Low internal pull resistor value is selected. */ .pullValueSelect = kPORT_LowPullResistor, /* Fast slew rate is configured */ .slewRate = kPORT_FastSlewRate, /* Passive input filter is disabled */ .passiveFilterEnable = kPORT_PassiveFilterDisable, /* Open drain output is disabled */ .openDrainEnable = kPORT_OpenDrainDisable, /* Low drive strength is configured */ .driveStrength = kPORT_LowDriveStrength, /* Normal drive strength is configured */ .driveStrength1 = kPORT_NormalDriveStrength, /* Pin is configured as LPI2C3_SCL */ .mux = kPORT_MuxAlt2, /* Digital input enabled */ .inputBuffer = kPORT_InputBufferEnable, /* Digital input is not inverted */ .invertInput = kPORT_InputNormal, /* Pin Control Register fields [15:0] are not locked */ .lockRegister = kPORT_UnlockRegister}; /* PORT3_27 (pin 52) is configured as LPI2C3_SCL */ PORT_SetPinConfig(PORT3, 27U, &port3_27_pin52_config); #endif ``` 同路径下的Kconfig增加I2C3的描述,如下图所示  # 四、ENV配置 进入ENV后,输入menuconfig进入配置界面,首先在板级支持内容下,开启I2C3,如下图所示  然后在驱动框架下开启I2C设备  启用U8G2驱动包以及其测试例程,如下图所示,这里选择I2C3作为驱动外设:  启用SSD1306驱动包以及其测试例程,如下图所示,这里同样选择I2C3作为驱动外设:  官方提供的drv_i2c驱动里只有一个I2C0的例子,简单补充下I2C3的内容,详细代码如下: ```c struct lpc_i2c_bus lpc_obj[] = { #ifdef BSP_USING_I2C0 { .I2C = LPI2C0, .baud = 100000U, .clock_attach_id = kFRO12M_to_LPI2C0, .clock_div_name = kCLOCK_DivLPI2C0, .clock_src = kCLOCK_Fro12M, .name = "i2c0", }, #endif #ifdef BSP_USING_I2C3 { .I2C = LPI2C3, .baud = 100000U, .clock_attach_id = kFRO12M_to_LPI2C3, .clock_div_name = kCLOCK_DivLPI2C3, .clock_src = kCLOCK_Fro12M, .name = "i2c3", }, #endif }; ``` 然后保存退出配置界面,使用pkgs --update指令获取驱动包,如下图所示  最后使用scons --target=mdk5生成keil工程。 打开工程,开始编译,会提示#include <_ansi.h>不存在,详细的解决方法参照[@出出啊](/u/db779ee1aa856f55)的问题答复[v4.1.1 ENV里使能SSD1306,需要包含_ansi.h头文件。找不到](https://club.rt-thread.org/ask/question/2da5e09a365aa04f.html "v4.1.1 ENV里使能SSD1306,需要包含_ansi.h头文件。找不到"),参照问题答复修改后即可编译通过。 下载到开发板后开始测试。 # 五、开始测试 连接到终端后,使用Table建可以看到u8g2以及SSD1306的测试代码内容,如下如所示  使用list device指令可以看到I2C3已经注册成功  首先测试u8g2的测试,在终端输入u8g2_ssd1306_12864_hw_i2c_example进行u8g2测试,可以看到屏幕上出现了RTTHREAD和😀   最后进行SSD1306的测试,在终端输入ssd1306_TestAll,即可开始一系列刷屏的测试。      至此I2C3硬件测试及实践内容完成。 # 六、心得体会 本次测试内容为恩智浦A156上的 IIC(硬件) 实践,除了增加I2C3的引脚配置以及Kconfig的内容,其它代码基本没有手敲,官方的软件包已经很到位了,希望后面官方可以把恩智浦的可视化配置工具集成到rtthread studio中。总的来说恩智浦A156+RT-Thread+env的开发模式相对简单、很容易上手。 因本人水平有限,文章内容及代码中可能会出现错误,还请谅解。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
werper
叫我点灯大师
文章
10
回答
19
被采纳
1
关注TA
发私信
相关文章
1
NXP的I2C应该比ST的好用吧
2
Use of I2C device driver
3
关于I2C 驱动问题请教
4
我如何知道这个iic的io配置和我电路设计的是一致的?
5
I2C模拟读操作失败,不知道问什么进不去读函数
6
RTT的I2C有官方文档资料没有
7
求 STM32F103 IIC 自定义IO初始化 代码
8
报一个LPC4008代码中I2C的bug
9
RTOS IIC总线使用
10
关于在RTT中使用STM32 I2C的疑问
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
GD32
ADC
flashDB
编译报错
socket
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
出出啊
1520
个答案
343
次被采纳
小小李sunny
1444
个答案
290
次被采纳
张世争
813
个答案
177
次被采纳
crystal266
550
个答案
161
次被采纳
whj467467222
1222
个答案
149
次被采纳
本月文章贡献
出出啊
1
篇文章
5
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部