mengxuan1303 发表于 2023-10-19 16:48:57

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

用该机的串口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;      //不用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;         
}


乘风飞扬 发表于 2023-10-19 19:24:30

可以的,具体用法参考STC32G实验箱例程包里面的77、78例子

mengxuan1303 发表于 2023-10-19 20:24:57

ok,谢谢,我仔细研究一下。

mengxuan1303 发表于 2023-10-20 09:41:31

mengxuan1303 发表于 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

BFMIPBWVFP 发表于 2024-7-25 15:16:47

这个uart1和uart2的spi模式没有那个独立的spi灵活,用起来有点别扭。

llyymm 发表于 2024-8-6 08:20:00

感谢分享经验,以后会用得到
页: [1]
查看完整版本: 32F单片机 求教串口2同步模式0,启用SPI功能,是否还可以启动DMA | 可以已解决