找回密码
 立即注册
查看: 930|回复: 5

32F单片机 求教串口2同步模式0,启用SPI功能,是否还可以启动DMA | 可以已解决

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-01-13 13:22:49

5

主题

11

回帖

75

积分

注册会员

积分
75
发表于 2023-10-19 16:48:57 | 显示全部楼层 |阅读模式
用该机的串口2的SPI(独立的SPI用于驱动其他设备)功能驱动液晶驱动芯片 HT1621,理论上可行。
首先用I/O操作,初始化HT1621,然后启动SPI功能。独立应用串口2SPI功能实现了HT1621的驱动,
但是转为DMA设置后,经过多次调整测试,均未成功。求救,UART2,执行SPI功能后,
是否还可以应用DMA对UART2操作。如果确定可以继续应用,那我再花些时间调试一下。


调试代码:


                if((gwMsg & MSG_DIS) == MSG_DIS)        //每200ms 出现MSG_DIS消息
                {
                        gwMsg &= ~MSG_DIS;
                        gliData = 1999999L;
                        Display(gliData,4);
                        DMA_UR2T_CR = 0xC0;                        //启动 UART2_SPI的DMA发送,实际调试结果没有反应
//                        for(bI = 0;bI<16;bI++)
//                        {                                       
//                                S2TI = 0;
//                                S2BUF = gbpDis_Ram[bI];        //不用DMA的调试结果已经通过   
//                                while (!S2TI);
//                        }
                }

初始化代码:

void UART2_Init(void)
{   
        S2SPI_S0 = 1;                     
        S2SPI_S1 = 0;
        S2CON = 0x10;                          //不需要接收数据,但这里遇到一个未理解的问题,赋值0x00,会导致  UART2 不工作(while (!S2TI); 陷入死循环),最后 赋值0x10后正常。
        S2CFG = 0x01;   
        
        USART2CR1 = 0x00;
        USART2CR4 = 0x02;                  
        
        
        DMA_UR2T_CFG = 0x00;                //在IO口初始化HT1621 LCD驱动后启动  USART2CR1 = 0x5B;   
        DMA_UR2T_STA = 0x00;
        DMA_UR2T_AMT = 0x0F;               
        DMA_UR2T_AMTH = 0x00;               
        DMA_UR2T_TXAH = (byte)((word)gbpDis_Ram >> 8);
        DMA_UR2T_TXAL = (byte)((word)gbpDis_Ram);
        DMA_UR2T_CR = 0x80;         
}


回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6843

积分

论坛元老

积分
6843
发表于 2023-10-19 19:24:30 | 显示全部楼层
可以的,具体用法参考STC32G实验箱例程包里面的77、78例子
截图202310191923479663.jpg
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-01-13 13:22:49

5

主题

11

回帖

75

积分

注册会员

积分
75
发表于 2023-10-19 20:24:57 | 显示全部楼层
ok,谢谢,我仔细研究一下。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-01-13 13:22:49

5

主题

11

回帖

75

积分

注册会员

积分
75
发表于 2023-10-20 09:41:31 | 显示全部楼层
mengxu*** 发表于 2023-10-19 20:24
ok,谢谢,我仔细研究一下。

利用UART2 的SPI 用DMA方式的HT1621显示驱动方案通过了,经验分享一下:利用IO方式初始化HT1621后启动SPI的经验如下述
        USART2CR1 = 0x10;
        USART2CR1 |= 0x48;                                                                                //USART2CR1 |= 0x4B;不能驱动HT1621
//        USART2CR1 = 0x58;                   //USART2CR1 = 0x5B; 不能驱动HT1621,但通过上述两条语句,即先开启SPI功能,再配置SPI可以通过HT1621
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2024-08-27 15:25:33

1

主题

17

回帖

105

积分

注册会员

积分
105
发表于 2024-7-25 15:16:47 | 显示全部楼层
这个uart1和uart2的spi模式没有那个独立的spi灵活,用起来有点别扭。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:322
  • 最近打卡:2025-05-02 10:02:36
已绑定手机

21

主题

487

回帖

1041

积分

金牌会员

积分
1041
发表于 2024-8-6 08:20:00 | 显示全部楼层
感谢分享经验,以后会用得到
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 12:56 , Processed in 0.123417 second(s), 85 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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