AT32F435无法驱动LCD
大家好,用的是AT32F435VGT7,100pin,XMC 16bit驱动480x320分辨率的LCD,地址线用的是A10,片选NE4,目前只能打开背光,死活驱动不了。
XMC初始化程序用的是AT_START_F435里面的,没有改动(只是改了自己板子对应的GPIO,其他XMC时序配置没有改动)。
调试了很多天,都没能解决,目前还是只能打开背光,屏幕一直是白色的,没有反应。硬件也检查过了,没问题。
硬件,软件都检查了,甚至把所有代码都删除了,只留下LCD初始化代码测试也不行,现在没头绪了。。。望大家指点!谢谢
void lcd_xmc_port_init(void)
{
gpio_init_typegpio_init_struct = {0};
xmc_norsram_init_typexmc_norsram_init_struct;
xmc_norsram_timing_init_type rw_timing_struct, w_timing_struct;
// 使能GPIO时钟A/B/C/D/E
crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOE_PERIPH_CLOCK, TRUE);
//使能XMC接口时钟
crm_periph_clock_enable(CRM_XMC_PERIPH_CLOCK, TRUE);
//GPIO配置,将GPIO复用为XMC
gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE2, GPIO_MUX_14); //GPIOA D4
gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE3, GPIO_MUX_14); //D5
gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE4, GPIO_MUX_14); //D6
gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE5, GPIO_MUX_14); //D7
gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE10, GPIO_MUX_14); //GPIOB NOE
gpio_pin_mux_config(GPIOC, GPIO_PINS_SOURCE2, GPIO_MUX_14);//GPIOC NWE
gpio_pin_mux_config(GPIOC, GPIO_PINS_SOURCE4, GPIO_MUX_14);//NE4
gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE0, GPIO_MUX_12);//GPIODD2
gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE1, GPIO_MUX_12);//D3
gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE5, GPIO_MUX_10);//A10
gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE8, GPIO_MUX_12);//D13
gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE9, GPIO_MUX_12);//D14
gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE10, GPIO_MUX_12); //D15
gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE14, GPIO_MUX_12); //D0
gpio_pin_mux_config(GPIOD, GPIO_PINS_SOURCE15, GPIO_MUX_12); //D1
gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE11, GPIO_MUX_12);//GPIOE D8
gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE12, GPIO_MUX_12); //D9
gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE13, GPIO_MUX_12); //D10
gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE14, GPIO_MUX_12); //D11
gpio_pin_mux_config(GPIOE, GPIO_PINS_SOURCE15, GPIO_MUX_12); //D12
//配置GPIO
gpio_init_struct.gpio_pins = GPIO_PINS_4 | GPIO_PINS_5 | GPIO_PINS_6| GPIO_PINS_7; //GPIOA
gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init(GPIOA, &gpio_init_struct);
gpio_init_struct.gpio_pins =GPIO_PINS_10;//GPIOB
gpio_init(GPIOB, &gpio_init_struct);
gpio_init_struct.gpio_pins =GPIO_PINS_2 | GPIO_PINS_4;//GPIOC
gpio_init(GPIOC, &gpio_init_struct);
gpio_init_struct.gpio_pins =GPIO_PINS_0| GPIO_PINS_1 | GPIO_PINS_5 | GPIO_PINS_8 | GPIO_PINS_9 | GPIO_PINS_10 | GPIO_PINS_14 | GPIO_PINS_15;//GPIOD
gpio_init(GPIOD, &gpio_init_struct);
gpio_init_struct.gpio_pins =GPIO_PINS_11 | GPIO_PINS_12 | GPIO_PINS_13 | GPIO_PINS_14 | GPIO_PINS_15;//GPIOE
gpio_init(GPIOE, &gpio_init_struct);
// XMC接口配置
xmc_norsram_default_para_init(&xmc_norsram_init_struct);
xmc_norsram_init_struct.subbank = XMC_BANK1_NOR_SRAM4;
xmc_norsram_init_struct.data_addr_multiplex = XMC_DATA_ADDR_MUX_DISABLE;
xmc_norsram_init_struct.device = XMC_DEVICE_SRAM;
xmc_norsram_init_struct.bus_type = XMC_BUSTYPE_16_BITS;
xmc_norsram_init_struct.burst_mode_enable = XMC_BURST_MODE_DISABLE;
xmc_norsram_init_struct.asynwait_enable = XMC_ASYN_WAIT_DISABLE;
xmc_norsram_init_struct.wait_signal_lv = XMC_WAIT_SIGNAL_LEVEL_LOW;
xmc_norsram_init_struct.wrapped_mode_enable = XMC_WRAPPED_MODE_DISABLE;
xmc_norsram_init_struct.wait_signal_config = XMC_WAIT_SIGNAL_SYN_BEFORE;
xmc_norsram_init_struct.write_enable = XMC_WRITE_OPERATION_ENABLE;
xmc_norsram_init_struct.wait_signal_enable = XMC_WAIT_SIGNAL_DISABLE;
xmc_norsram_init_struct.write_timing_enable = XMC_WRITE_TIMING_ENABLE;
xmc_norsram_init_struct.write_burst_syn = XMC_WRITE_BURST_SYN_DISABLE;
xmc_nor_sram_init(&xmc_norsram_init_struct);
// XMC时序配置
xmc_norsram_timing_default_para_init(&rw_timing_struct, &w_timing_struct);
rw_timing_struct.subbank = XMC_BANK1_NOR_SRAM4;
rw_timing_struct.write_timing_enable = XMC_WRITE_TIMING_ENABLE;
rw_timing_struct.addr_setup_time = 0x2;
rw_timing_struct.addr_hold_time = 0x0;
rw_timing_struct.data_setup_time = 0x2;
rw_timing_struct.bus_latency_time = 0x0;
rw_timing_struct.clk_psc = 0x0;
rw_timing_struct.data_latency_time = 0x0;
rw_timing_struct.mode = XMC_ACCESS_MODE_A;
w_timing_struct.subbank = XMC_BANK1_NOR_SRAM4;
w_timing_struct.write_timing_enable = XMC_WRITE_TIMING_ENABLE;
w_timing_struct.addr_setup_time = 0x2;
w_timing_struct.addr_hold_time = 0x0;
w_timing_struct.data_setup_time = 0x2;
w_timing_struct.bus_latency_time = 0x0;
w_timing_struct.clk_psc = 0x0;
w_timing_struct.data_latency_time = 0x0;
w_timing_struct.mode = XMC_ACCESS_MODE_A;
xmc_nor_sram_timing_config(&rw_timing_struct, &w_timing_struct);
//连续读取持续时间和连续写入持续时间的总线周转阶段
xmc_ext_timing_config(XMC_BANK1_NOR_SRAM4, 0x08, 0x08);
//使能XMC Bank1_nor_SRAM4
xmc_nor_sram_enable(XMC_BANK1_NOR_SRAM4, TRUE);
}
已经解决了,大家不用回复了! showmyself 发表于 2024-1-24 13:41
已经解决了,大家不用回复了!
大佬,请教一下是什么解决的?我也一样的情况{:cry:} 发一下如何解决的,给后来人一点参考 在调试AT32F435VGT7与LCD显示屏的连接时,如果只能打开背光而无法驱动屏幕显示内容,可能是由于时序配置问题导致 确保XMC(外部存储器控制器)的时序配置正确,包括时钟频率、数据建立和保持时间等。检查数据手册中关于LCD控制器的时序要求,并与你的配置进行对比 确认所有与LCD连接的引脚(包括数据线、控制线如RS、WR、CS等)都正确配置为复用功能。确保GPIO模式、速度和上拉/下拉设置正确 确保LCD的初始化顺序正确,包括电源开启、复位、时序配置等。有些LCD控制器需要特定的初始化序列才能正常工作 确认使用的通信协议(如8080并行接口、SPI等)与LCD控制器兼容,并且配置正确。检查数据传输是否正确,可以使用逻辑分析仪捕捉信号,查看数据是否正确发送 保证软件中对LCD的写操作和命令发送正确无误。可以尝试简化代码,只发送基本的初始化命令和测试数据,逐步增加复杂性,以定位问题 使用逻辑分析仪或示波器捕捉信号,检查数据线和控制线的波形是否符合预期。通过调试工具(如调试器)单步执行代码,检查每一步的输出是否正确。 查找是否有其他开发者成功使用相同或相似硬件配置的案例,参考他们的配置和代码 联系技术支持或社区,寻求帮助 虽然你提到硬件检查过没有问题,但仍需确保所有连接稳固,没有虚焊或短路。检查电源电压是否稳定,是否符合LCD控制器的要求
页:
[1]