擦鞋匠 发表于 2018-8-31 17:45:23

请教: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秒钟也没有数据显示,完全是一点反应都没有。这个现象该如何解释?

恳请指教,不胜感激!

wye11083 发表于 2018-8-31 18:55:52

(1)lcd显示是可以持续一会儿的,然后液晶会慢慢去极化,然后变淡消失。(2)你spi太快了吧,降到100kbps以内再试试。

擦鞋匠 发表于 2018-9-2 22:29:33

wye11083 发表于 2018-8-31 18:55
(1)lcd显示是可以持续一会儿的,然后液晶会慢慢去极化,然后变淡消失。(2)你spi太快了吧,降到100kbps ...

感谢阁下指教,不胜感激。

这个问题最终解决了。

实际原因:LCD复位引脚是低电平有效,而实际上该引脚我并没有连接,导致LCD模块处于一种近乎随机的状态。

解决办法:将该引脚设置为内部上拉即可。
页: [1]
查看完整版本: 请教:MSP430通过SPI_B3和LCD进行通讯,显示数据时隐时现。