完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
程序在进入lcd初始化阶段就跑飞,仔细阅读的源代码发现一个问题,
在这个函数内部
给出了interface_i2c的处理函数地址 配置lcd初始化参数时
使用这个参数对lcd进行初始化
#define LCD_WRITE_COMMAND(data, length) g_lcd_handle.interface_drv->write_command(g_lcd_handle.interface_drv, (data), (length)) static inline esp_err_t LCD_WRITE_CMD(uint8_t cmd) { return LCD_WRITE_COMMAND((uint8_t*)&cmd, 1); } 在interface_drv_def.h文件中,把LCD_WRITE_CMD指向了LCD_WRITE_COMMAND 而LCD_WRITE_COMMAND 指向的是 g_lcd_handle.interface_drv->write_command 根据前面的参数我认为,LCD_WRITE_COMMAND 应该指向。 g_lcd_handle.interface_drv->write_cmd write_command 前面根本就没有赋值,所以一调用就跑飞。(这个地方解释起来真是自己都觉得很绕,不知道是否说清楚了) 不知道我的理解是否正确。还是我理解存在问题,还请大家指点 |
|
相关推荐
1个回答
|
|
以下是一些建议和解决方案:
1. 检查硬件连接:确保SSD1306 OLED屏与微控制器之间的连接正确。检查数据线、时钟线和电源线是否连接正确,以及是否有任何损坏或接触不良的地方。 2. 检查电源:确保SSD1306 OLED屏的电源电压在规定的范围内。过低或过高的电压可能导致驱动失败。 3. 检查I2C通信:SSD1306 OLED屏使用I2C通信协议与微控制器进行通信。确保I2C通信正常,包括I2C时钟速率、地址等。 4. 检查初始化代码:仔细检查您的初始化代码,确保所有必要的初始化步骤都已正确执行。例如,设置正确的I2C地址、初始化显示参数等。 5. 检查源代码问题:从您提供的代码片段来看,可能存在一些问题。请检查以下方面: a. 确保`type`变量的值是正确的,它应该与SSD1306 OLED屏的类型相匹配。 b. 确保`i2c_lcd_write_cmd`函数已正确实现,并且能够正确发送命令到SSD1306 OLED屏。 c. 检查`interface_i2c`和`interface_drv`结构体是否已正确初始化。 6. 使用调试工具:如果可能的话,使用调试工具(如调试器或逻辑分析仪)来检查程序在运行过程中的行为。这可以帮助您找到导致程序跑飞的具体原因。 7. 查阅文档和示例代码:查阅SSD1306 OLED屏的数据手册和示例代码,以确保您的实现与官方推荐的实现一致。 8. 更新驱动库:如果您使用的是第三方库来驱动SSD1306 OLED屏,请确保您使用的是最新版本的库。有时候,旧版本的库可能存在一些已知的问题或不兼容的问题。 |
|
|
|
只有小组成员才能发言,加入小组>>
545浏览 6评论
457浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
437浏览 5评论
441浏览 4评论
411浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-21 23:53 , Processed in 0.853440 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号