找回密码
 立即注册
楼主: 乐此***

求助!!DAM_LCM例程改编驱动并口TFT无法实现请求指点

[复制链接]
  • TA的每日心情
    开心
    昨天 11:56
  • 签到天数: 106 天

    [LV.6]常住居民II

    28

    主题

    103

    回帖

    838

    积分

    高级会员

    积分
    838
     楼主| 发表于 2022-12-14 12:35:42 | 显示全部楼层
    qq603599910 发表于 2022-12-14 10:17
    各位大佬,有STC32的ADC-DMA的范本吗?我是模拟电子专业对编程只懂皮毛,项目需要以前都是用范本移植.谢谢! ...

    你点开本页头部左侧的“官网”,在官网页面头部点开“应用方案”可以看到几个“实验箱的资料,根据你用到的芯片下载代码就好了。
    1.png
    应用方案-深圳国芯人工智能有限公司 (stcai.com)
  • TA的每日心情
    奋斗
    昨天 20:23
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    3

    主题

    28

    回帖

    335

    积分

    中级会员

    积分
    335
    发表于 2022-12-14 13:53:20 | 显示全部楼层
    乐此不疲 发表于 2022-12-14 12:35
    你点开本页头部左侧的“官网”,在官网页面头部点开“应用方案”可以看到几个“实验箱的资料,根据你用到 ...

    谢谢! 还真不知道原来还能在这里拿到资源范本,之前一直只在ISP程序和百度程序范本,太亏啦...
  • TA的每日心情
    奋斗
    昨天 09:21
  • 签到天数: 123 天

    [LV.7]常住居民III

    26

    主题

    1252

    回帖

    3911

    积分

    论坛元老

    积分
    3911
    发表于 2022-12-16 19:28:06 | 显示全部楼层
    本帖最后由 乘风飞扬 于 2022-12-16 19:37 编辑
    乐此不疲 发表于 2022-12-14 12:22
    执行函数中有启动传输的代码的。我目前只是在验证例程,所不同的是例程驱动的是8位并口TFT,而我是通过修 ...

    例程使用的LCD屏的分辨率是320*240的,1个点RBG565格式包含2个字节数据,所以刷新一整屏的数据量 320*240*2=153600字节,DMA一次传输的数据长度设置2048字节,153600/2048=75,也就是使用DMA一包一包的传输数据,刷新一整屏需要搬运75次,所以 LCD_Fill 函数里面设置 index = 75。DMA中断函数里面每完成一次传输,index--,当 index==0 时说明153600字节全部发送完毕,就可以设置 DMA_LCM_CR = 0; LCD_CS=1; 停止传输,否则的话说明传输还没完成,DMA_LCM_CR = 0xa0; 继续下一包DMA的数据传输。

    你修改的DMA中断函数里面,只对 index-- 没有再次启动DMA传输(DMA_LCM_CR = 0xa0),所以只发送一次就停止了。没有启动DMA传输就不会再产生DMA中断,LCD_CS 就不会被置1,所以就卡在 LCD_Fill 函数里了。

    该用户从未签到

    550

    主题

    9209

    回帖

    1万

    积分

    管理员

    积分
    13926
    发表于 2022-12-16 20:06:13 | 显示全部楼层
    分析专业到位
  • TA的每日心情
    开心
    昨天 11:56
  • 签到天数: 106 天

    [LV.6]常住居民II

    28

    主题

    103

    回帖

    838

    积分

    高级会员

    积分
    838
     楼主| 发表于 2022-12-17 12:19:32 | 显示全部楼层
    乘风飞扬 发表于 2022-12-16 19:28
    例程使用的LCD屏的分辨率是320*240的,1个点RBG565格式包含2个字节数据,所以刷新一整屏的数据量 320*240* ...

    多谢临帖,你说的“只对index--没有再次启动DMA传输----”是否是指在中断函数中没有启动再次传输?
    我的LCD_Fill函数中的最后三条代码如下:
        LCD_CS=0;
        DMA_LCM_CR = 0xa0;
        while(!LCD_CS);
    这其中是有这条启动代码的,我的理解是,这个函数是在主函数的主循环中运行的,每次中断响应后就开始发送2048个数据,发送完成后清除中断标志返回断点处仍然是主循环中,主循环会再次执行LCD)_Fill函数的,此时如果index不是0的话就会再次在此函数中执行DMA_LCM_CR=0xa0这一句代码的,直到index=0时在中断函数中将LCD_CS置1让主循环停止在 while(!LCD_CS);这里。
  • TA的每日心情
    奋斗
    昨天 09:21
  • 签到天数: 123 天

    [LV.7]常住居民III

    26

    主题

    1252

    回帖

    3911

    积分

    论坛元老

    积分
    3911
    发表于 2022-12-17 12:51:13 | 显示全部楼层
    乐此不疲 发表于 2022-12-17 12:19
    多谢临帖,你说的“只对index--没有再次启动DMA传输----”是否是指在中断函数中没有启动再次传输?
    我的L ...

    LCD_Fill函数中的最后三条代码如下:
        LCD_CS=0;
        DMA_LCM_CR = 0xa0;
        while(!LCD_CS);


    while(!LCD_CS);  ----  这条指令如果 LCD_CS 一直等于0的话,就是一个死循环,不能继续往下执行,也就不会回到主循环的。
    这条指令需要 LCD_CS == 1 才能继续往下执行回到主循环,而中断里需要执行 75 次  DMA_LCM_CR = 0xa0; 才能使 index = 0,才能使 LCD_CS = 1。这样就产生了死锁的矛盾,导致程序卡死在 while(!LCD_CS);
  • TA的每日心情
    开心
    昨天 11:56
  • 签到天数: 106 天

    [LV.6]常住居民II

    28

    主题

    103

    回帖

    838

    积分

    高级会员

    积分
    838
     楼主| 发表于 2022-12-18 11:33:43 | 显示全部楼层
    乘风飞扬 发表于 2022-12-17 12:51
    LCD_Fill函数中的最后三条代码如下:
        LCD_CS=0;
        DMA_LCM_CR = 0xa0;

    非常感谢你帮我找到了问题的症结,就是这句while(!LCD_CS),程序确实卡在了这里,去掉!后就豁然开朗了,再谢!

    该用户从未签到

    550

    主题

    9209

    回帖

    1万

    积分

    管理员

    积分
    13926
    发表于 2022-12-18 11:51:47 | 显示全部楼层
    还是建议楼主 去 STC 领取 1个 免费+包邮 送的 STC-USB Link1D,
    用仿真的方式来调试开发, 淘宝也才 RMB35


    STC-USB Link1D 可以支持 SWD仿真,
    在线下载-自动停电/上电,脱机下载-自动停电/上电,6M bps 下载速度,传输无延迟
    及 扩展的 USB-CDC 串口
    STC-USB Link1D  = SWD仿真         +        USB-CDC 串口
    STC-USB Link1D  = USB-CDC 串口1 +         USB-CDC 串口2
    STC-USB Link1D  = U8W-Mini         +         USB-CDC 串口

    该用户从未签到

    550

    主题

    9209

    回帖

    1万

    积分

    管理员

    积分
    13926
    发表于 2022-12-18 11:53:28 | 显示全部楼层
    1.png
    【新提醒】STC32+STC-USB Link1D 仿真流程介绍 - 编译器/仿真器/ISP下载/做自己的ISP - 国芯论坛 - Powered by Discuz! (stcaimcu.com)

    STC-USB Link1D工具SWD仿真STC32G12K128,同时第二组串口跟被仿真的MCU的串口1/2/3/4通信

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-26 00:26 , Processed in 0.067660 second(s), 61 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表