关于使用AiCube配置LCM_DMA遇到的问题
我建立一个空工程使用 Aicube 配置 Stc32g144k246 芯片使用 LCM 为读取模式,使用 DMA_LCM_TriggerResdData ()函数触发 LCM_DMA 读取数据,按理说 RD(p3.7)会按一定频率自动拉低才是。我用逻辑分析仪看 p3.7 引脚 没波形,一直都是高电平 ,并且DMA 中断也没触发。难道触发DMA_LCM读取数据需要其他条件?这是我的主循环代码: while (1)
{
//<<AICUBE_USER_MAIN_LOOP_BEGIN>>
// 在此添加主函数中用户主循环代码
delay_ms(2000);
DMA_LCM_TriggerReadData();//触发LCM DMA读取数据(这是Aicube生成的函数)
//<<AICUBE_USER_MAIN_LOOP_END>>
}
这是Aicube给出的LCM初始化函数:
void LCM_Init(void)
{
LCM_DATA8BSwitchP2(); //选择LCM数据口: P2
LCM_RSSwitchP45(); //选择LCM的RS端口: RS (P4.5)
LCM_CTRLSwitchP3736(); //选择LCM的R/W控制端口: RD (P3.7), WR (P3.6)
LCM_SetMode_i8080(); //设置LCM为i8080模式
LCM_SetBitWidth_8B(); //设置LCM为8位数据模式
LCM_SetClockDivider(4); //设置LCM时钟分频
LCM_SetSetupTime(0); //设置LCM数据建立时间
LCM_SetHoldTime(0); //设置LCM数据保持时间
LCM_Enable(); //使能LCM功能
DMA_LCM_SetAmount(15999); //设置LCM DMA发送/接收字节数
DMA_LCM_SetRxAddress(pu8LCMDMARxBuffer); //设置LCM DMA接收缓冲区地址
DMA_LCM_SetInterval(0); //设置LCM DMA发送/接收字节间隔时间(系统时钟)
DMA_LCM_ClearFlag(); //清除LCM DMA中断标志
DMA_LCM_SetBusPriority(0); //设置总线访问为最低优先级
DMA_LCM_SetIntPriority(0); //设置中断为最低优先级
DMA_LCM_EnableInt(); //使能LCM DMA中断
DMA_LCM_Enable(); //使能LCM DMA功能
//DMA_LCM_TriggerReadData(); //触发LCM DMA读取数据
未复现,量了下有波形,检查是否频率给太高?
ercircle 发表于 2026-2-7 16:54
未复现,量了下有波形,检查是否频率给太高?
非常感谢,我发现如果要主动读的话要一起使用这两个函数才行,
LCM_TrigReadData(); // 设置LCM控制器为读取数据模式
DMA_LCM_TriggerReadData();//触发LCM DMA读取操作 ercircle 发表于 2026-2-7 16:54
未复现,量了下有波形,检查是否频率给太高?
已经找出问题所在了,非常感谢您
页:
[1]