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;
}
可以的,具体用法参考STC32G实验箱例程包里面的77、78例子
ok,谢谢,我仔细研究一下。 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 这个uart1和uart2的spi模式没有那个独立的spi灵活,用起来有点别扭。 感谢分享经验,以后会用得到
页:
[1]