工具/软件:Code Composer Studio
大家好,
我正在尝试将MCU MSP430FR5969连接到SSD1306 OLED (通过I2C通信)。 当我逐步调试时,它可以工作,但当我尝试一次运行所有时,没有任何反应。 请有人来指导我吗? 我被卡住了。 非常感谢。
#include <MSP40.0.h>
const unsigned char Init[]={0xAE,0x81,0x07,0x20,0x01,0x21,0x00,0x7F,0x22,0x00,0x07,0x40,0xA0,0xA8,0x3F,
0xC0,0xD3,0x00,0x8D,0x14,0xDA,0x12,0xD5,0x80,0xD9,0x22,0xDB,0x20,0xA6,0xA4,0xAF,0xA5};
// const unsigned char Mod[]={0xA5};
void main (void){
WDTCTL = WDTPW | WDTHOLD;
P1SEL1 || BIT6 + BIT7;
P1DIR |=BIT0;
P1OUT &=~BIT0;
PM5CTL0 &=~LOCKLPM2;
UCB0CTLW0 |= UCSWRST;
UCB0CTLW0 |= UCMODE_3 | UCMST | UCSYNC | UCSSEL_2; // I2C主模式
UCB0CTLW1 = UCASTP_2;//使用SMCLK,保持SW重置
UCB0BR0=0x40;
UCB0I2CSA = 0x3C; //地址
UCB0CTL1 &=~UCSWRST;
UCB0IE |= UCTXIE;
而(1){
__DELAY周期(20);
While (UCB0CTL1和UCTXSTP);
UCB0CTLW0 |= UCTR | UCTXSTT;
__bis_sr_register(LPM0_bits | GIE);
}
{//FIN main
////////////////////////////////////////////////////////////
#pragma vector = USI_B0_vector
__interrupt void USI_B0_ISR(void){
SWITCH(__EIN_RANGE(UCB0IV, 0x1E))/USI_I2C_UCBIT9IFG)){
案例USI_NONE: 中断; //矢量0:无中断
案例USI_I2C_UCALIFG:中断; //矢量2:ALIFG
案例USI_I2C_UCNACKIFG: //矢量4:NACKIFG
UCB0CTL1 || UCTXSTT; // I2C启动条件-如果不符合,则重新发送启动
中断;
案例USI_I2C_UCSTIFG:
中断; //引导程序6:开始
案例USI_I2C_UCSTPIFG:
UCB0IFG &=~UCSTPIIFG;
中断; //矢量8:检测到停止
案例USI_I2C_UCRXIFG3:中断; //矢量10:RXIFG3
案例USI_I2C_UCTXIFG3:中断; //矢量12:TXIFG3
案例USI_I2C_UCRXIFG2:中断; //矢量14:RXIFG2
案例USI_I2C_UCTXIFG2:中断; //矢量16:TXIFG2
案例USI_I2C_UCRXIFG1:中断; //矢量18:RXIFG1
案例USI_I2C_UCTXIFG1:中断; //矢量20:TXIFG1
案例USI_I2C_UCRXIFG0:
中断; //矢量22:RXIFG0主控0
案例USI_I2C_UCTXIFG0:
P1OUT ^= BIT0;
//__delay_cycles (2万);
UCB0TXBUF = 0x80;
无符号int c;
对于(c=0; c< 32; c++){
P1OUT ^= BIT0;
//__bis_sr_register (LPM0_bits + GIE);
UCB0TXBUF =初始化[c];
//__bis_sr_register(LPM0_bits + GIE);
}
//UCB0CTL1 |= UCTXSTP;
//UCB0IFG &=~ UCTXIFG;
中断; //矢量24:TXIFG0主控0
案例USI_I2C_UCBCNTIFG: //矢量26:BCNTIFG
//P1OUT ^= BIT0; //在WFP 1.0 上切换LED
中断;
案例USI_I2C_UCCLTOIFG:中断; //向量28:时钟低超时
案例USI_I2C_UCBIT9IFG:中断; //矢量30:第9位
默认值:break;
}
}
顺祝商祺

