请教:MSP430通过SPI_B3和LCD进行通讯,显示数据时隐时现。
调试信息:msp4305438a + iar7.12.1
调试现象:
msp430作为主机,lcd作为从机。使用轮询写入数据方式。希望lcd显示数据每秒钟刷新一次。
使用硬件debug,大概前3秒钟lcd上有数据显示,接着显示数据就丢失了,并且,断电后重新上电(不进入debug)lcd不显示数据,更不会刷新了。
调试代码:
主程序,CPU频率是24MHz
void main()
{
board_init();
spi3_init();delay_ms(10);
lcd_init(); delay_ms(10);
while (1)
{
lcd_disp_cha(0, 0, 'a', LCD_FONT_8X16, LCD_LINE_OFF);
delay_ms(1000);
lcd_disp_cha(0, 0, 'b', LCD_FONT_8X16, LCD_LINE_OFF);
delay_ms(1000);
}
}
SPI配置(其实MISO引脚根本没有使用,因为不用从lcd读取数据)
void spi3_init(void)
{
P10DIR |= BIT0 + BIT4;
P10SEL |= BIT1 + BIT2 + BIT3;
P10REN |= BIT0 + BIT1 + BIT2 + BIT3 + BIT4;
UCB3CTL1 |= UCSWRST;
UCB3CTL0 |= UCSYNC + UCMST + UCMSB + UCCKPL;
UCB3CTL1 |= UCSSEL_2;
UCB3BR0 = 0x04;
UCB3BR1 = 0;
UCB3CTL1 &= ~UCSWRST;
}
SPI读写
uint8_t spi3_rw_byte(uint8_t byte)
{
while ((UCB3STAT & UCBUSY)); __no_operation();
UCB3TXBUF = byte;
while ((UCB3STAT & UCBUSY)); __no_operation();
return UCB3RXBUF;
}
调试问题:
1、如果是硬件连接或者寄存器配置问题,那么从一开始就不应该有数据显示。为什么会显示一会之后,数据才丢失呢?
2、断电后重新上电,lcd 连前3秒钟也没有数据显示,完全是一点反应都没有。这个现象该如何解释?
恳请指教,不胜感激! (1)lcd显示是可以持续一会儿的,然后液晶会慢慢去极化,然后变淡消失。(2)你spi太快了吧,降到100kbps以内再试试。 wye11083 发表于 2018-8-31 18:55
(1)lcd显示是可以持续一会儿的,然后液晶会慢慢去极化,然后变淡消失。(2)你spi太快了吧,降到100kbps ...
感谢阁下指教,不胜感激。
这个问题最终解决了。
实际原因:LCD复位引脚是低电平有效,而实际上该引脚我并没有连接,导致LCD模块处于一种近乎随机的状态。
解决办法:将该引脚设置为内部上拉即可。
页:
[1]