This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS:MSP430F5529LP SPI MAX7219不工作

Guru**** 2546020 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/569091/ccs-msp430f5529lp-spi-max7219-not-working

工具/软件:Code Composer Studio

大家好! 

我尝试计算 MSP430F5529LP 和 MAX7219 8x8点矩阵之间的 SPI 通信、但无法正常工作。

对于电平转换、我使用 JY-MCU 5V-3V 四通道转换模块 、保持3V 引脚未连接。
我用 这个代码在我的 MSP430G2553上标了出来这也是一样 的、所有东西都运行正常、但在5529上却不是。

我请求帮助!
以下是我的代码:
//

#include 
#include 


//
//
//原型
//
//*********
void SPI_max (uint8_t address、uint8_t data);
void init_MAX7219 (void);

// MAX7219寄存器地址
#define MAX_NOOP 0x00
#define MAX_DIGIT0 0x01
#define MAX_DIGIT1 0x02
#define MAX_DIGIT2 0x03
#define MAX_DIGIT3 0x04
#define MAX_DIGIT4 0x05
#define MAX_DIGIT5 0x06 #define
MAX_DIGITAL_DIIG0 0x08
#define






MAX 0x0X0X0X0XMAX #define MAX #define MAX_MART_VISIT 0x0X0X0X0X0X0X0X0X0X0X0X0X0_MAX #define MAX #define MAX #define MAX_VIST_VISIT #define MAX_VISIT #define 0x7 #define 0x20 MAX #define 0x (尚未完成):number[digit][row]
const uint8_t number[10][8]={
{0x3c、0x66、0x66、0x66、0x66、 0x66、0x66、0x3c}、// 0
{0x18、0x38、0x18、0x18、0x18、 0x18、0x18、0x3c}、// 1.
{0x3c、0x66、0x06、0x06、0x0c、 0x18、0x30、0x7E}、// 2
{0x3c、0x66、0x06、0x1E、0x1E、 0x06、0x66、0x3c}、// 3
};

uint8_t returnValue_SPI = 0x00;
uint8_t row、framecounter;


int main (void)
{

WDTCTL = WDTPW+WDTHOLD; //停止看门狗计时器

P6OUT |= BIT4; //为 CS
P6DIR 设置 P6.4 |= BIT4; //将 P6.4设置为输出方向
P3SEL |= BIT0+BIT2; // P3.0、2选项选择
//P3DIR |= BIT0+BIT1 + BIT2; //将 P3.0、2设置为输出方向

UCB0CTL1 |= UCSWRST; //**将状态机复位**
UCB0CTL0 |= UCMST+UCCKPH+UCMSB+UCSYNC;// 3引脚8位 SPI 主器件
// MSB

UCB0CTL1 |= UCSSEL_2; // SMCLK
UCB0BR0 = 0x02; ///2
UCB0BR1 = 0; //
UCB0CTL1 &=~UCSWRST; //**初始化 USCI 状态机**__DELAY_CYCLES

(100000);

init_MAX7219 ();

__DELAY_CYCLES (1000);

//一些 vars
uint8_t row、framecounter;

//在
(1)
{时永久循环
//循环浏览某些帧
for (framecounter=0;framecounter<4;framecounter++)
{
//使用来自 number[framecounter]的数据加载所有8行/位寄存器
对于(row=0;row<8;row++)
{
SPI_max (MAX_DIGIT0+row、number[framecounter][row]);
}
__DELAY_CYCLES (50000);//在显示下一帧
之前等待一位}
}

}//
发送16位为:xxxxaaadddddd (忽略、地址、数据)
//并使用低电平有效芯片选择
void SPI_max (uint8_t address、uint8_t data)
{
P6OUT &=~BIT4; // CS 低电平
_delay_cycles (50);
while (!(UCB0IFG&UCTXIFG)); //等待直到完成
UCB0TXBUF =(地址和0x0F);
while (!(UCB0IFG&UCTXIFG)); //等待直到完成
UCB0TXBUF =(数据);
while (!(UCB0IFG&UCTXIFG)); //等待直到完成
P6OUT |= BIT4; // CS 高
电平}

void init_MAX7219 (void)
{
//使用8x8 LED 矩阵初始化 MAX7219
SPI_max (MAX_NOOP、0x00);//无 OP (上电后似乎需要)
SPI_max (MAX_SCANLIMIT、0x07);//启用所有数字(当前每行8位始终需要)
SPI_max (MAX_Intensity、0x03);//显示强度(0x00至0x0F)
SPI_max (MAX_DECOMDE、0);// LED 矩阵没有 BCD 解码

//清除所有行/数字
SPI_max (MAX_DIGIT0、0);
SPI_max (MAX_DIGIT1、0);
SPI_max (MAX_DIGIT2、0);
SPI_max (MAX_DIGIT3、0);
SPI_max (MAX_DIGIT4、0);
SPI_max (MAX_DIGIT5、0);
SPI_max (MAX_DIGIT6、0);
SPI_max (MAX_DIGIT7、0);
SPI_max (MAX_SHUTDOWN、1);//唤醒振荡器/向上显示
}





  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    已解决!
    主要问题是 void SPI_max ()-->必须在函数的和处添加 P6OUT &=~BIT4。 花了我一段时间才明白。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、BAN5en、

    很高兴您能够解决您的问题。 感谢您在论坛上跟进该解决方案!