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.
您好,
我使用 Launchpad 的 SPI 连接到 MAX7219。
这是我的硬件连接:
我使用的是三个引脚 p9.4、p9.5和 p9.7。
以下是我的源代码。
#include "msp.h"
#include
#include "Clock.h"
#include "string.h"
#include "driverlib.h"
void SPI_init (void)
{
EUSCI_A3->CTLW0 = 0x0001; //将 eUSCI 模块保持在复位模式
EUSCI_A3->CTLW0 = 0xAD83; //A
EUSCI_A3->BRW = 120;
//在 SPI 模式下不使用调制,因此清除 UCA3MCTLW
EUSCI_A3->MCTLW = 0;
P9->SEL0 |= 0xB0;
P9->SEL1 &=~0xB0;//将 P9.7、P9.5和 P9.4配置为主模块功能
EUSCI_A3->CTLW0 &=~0x0001; //启用 eUSCI 模块
EUSCI_A3->IE &=~0x0003; //禁用中断
}
void Write_Max7219_BYTE (uchar 数据)
{
while (EUSCI_A3->STATW & 0x01);
while (((EUSCI_A3->IFG & 0x02))
EUSCI_A3->TXBUF =数据;
}
void Write_Max7219 (uchar 地址、uchar dat)
{
WRITE_Max7219_BYTE (地址);
write_Max7219_Byte (dat);
}
空 Init_MAX7219 (空)
{
WRITE_Max7219 (0x09、0x00);
WRITE_Max7219 (0x0a、0x03);
WRITE_Max7219 (0x0B、0x07);
WRITE_Max7219 (0x0c、0x01);
}
void clear (void)(空)
{
WRITE_Max7219 (0x01、0x00);
WRITE_Max7219 (0x02、0x00);
WRITE_Max7219 (0x03、0x00);
WRITE_Max7219 (0x04、0x00);
WRITE_Max7219 (0x05、0x00);
WRITE_Max7219 (0x06、0x00);
WRITE_Max7219 (0x07、0x00);
WRITE_Max7219 (0x08、0x00);
}
/**
* main.c
*
void main (void)
{
unsigned char test_buf[]={0x80、0x40、0x20、0x10、0x08、0x04、0x02、0x01};
WDT_A_HOLDTimer();
Clock_Init48MHz ();
spi_init();
UINT I、j;
Clock_Delay1ms (50);
WRITE_Max7219 (0x0F、0x01);
Clock_Delay1ms (1000);
WRITE_Max7219 (0x0F、0x00);
Clock_Delay1ms (50);
init_MAX7219();
Clock_Delay1ms (50);
clear();
Clock_Delay1ms (1000);
while (1){
对于(i = 0;i < 8;i++){
WRITE_Max7219 (i+1、test_Buf[i]);
}
if (i ==8)
I = 0;
}
}
我不使用中断、直接操作寄存器来控制数据传输。
但是、当我发送字符数组"test_buf"时、前五个数据正常、后三个数据发送过去的结果错误。
当我执行 Write_Max7219 (6、0x04)时、数字管的结果是执行 Write_Max7219 (6、0x04)和 Write_Max7219 (8、0x06)。
我怀疑在 TXBUF 数据被传输到发送移位寄存器后、在发送下一个数据时移位寄存器不会被清除。
因为我使用 CCS 调试来查看 TXBUF 寄存器的值与我写的值相同。
如何判断是否有原因导致该误差、或者我是否可以手动清除发送移位寄存器以消除移位寄存器的影响?
谢谢、
更好
您好、
如果您使用 SimpleLink MSP432P4 SDK 中的 Driverlib API、调试将会很容易。 这些 API 由 TI 和客户进行测试、因此它们中的大多数都可以在无需直接修改寄存器的情况下工作。
使用 Driverlib API 的示例位于 SDK 的文件夹"./examples/nortos/MSP_EXP432P401R/driverlib "中。 请使用最接近您的应用程序的示例、并根据您的需求进行修改。
希望这对您有所帮助!
谢谢、
SAI
您好!
您可以通过复位外设来清除内容。 我对字节写入例程中的操作有点担心。
void Write_Max7219_BYTE (uchar 数据) { while (EUSCI_A3->STATW & 0x01); while (((EUSCI_A3->IFG & 0x02)) EUSCI_A3->TXBUF =数据; }
当你向 TXBUF 写入一个值并且移位寄存器中没有任何值时、它将自动移动到移位寄存器、TXIFG 将再次被置位。 您能否将函数的逻辑更改为在 TXIFG 为"0"时在 while 环路中等待、然后继续加载数据?
while (!(EUSCI_A3->IFG 和 EUSCI_A_IFG_TXIFG));
此致、
Chris