打印
[其他ST产品]

使用STM32CubeMX工程中,SPI操作MAX7219结果错误

[复制链接]
1072|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
probedog|  楼主 | 2023-6-26 10:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F103C8T6核心板,MAX7219点阵模块,STM32CubeMX 生成工程,并配置SPI1为Transmit Only Master ,配置PA4 为 GPIO_output 模式是open drain

max7219有一段51的例子代码,
//功能:向MAX7219(U3)写入字节
//入口参数:DATA
//出口参数:无
//说明:
void Write_Max7219_byte(uchar DATA)         
{
            uchar i;   
                Max7219_pinCS=0;               
            for(i=8;i>=1;i--)
          {                  
            Max7219_pinCLK=0;
            Max7219_pinDIN=DATA&0x80;
            DATA=DATA<<1;
            Max7219_pinCLK=1;
           }                                 
}
//-------------------------------------------
//功能:向MAX7219写入数据
//入口参数:address、dat
//出口参数:无
//说明:
void Write_Max7219(uchar address,uchar dat)
{
     Max7219_pinCS=0;
         Write_Max7219_byte(address);           //写入地址,即数码管编号
             Write_Max7219_byte(dat);               //写入数据,即数码管显示数字
         Max7219_pinCS=1;                        
}

void Init_MAX7219(void)
{
Write_Max7219(0x09, 0x00);       //译码方式:BCD码
Write_Max7219(0x0a, 0x03);       //亮度
Write_Max7219(0x0b, 0x07);       //扫描界限;8个数码管显示
Write_Max7219(0x0c, 0x01);       //掉电模式:0,普通模式:1
Write_Max7219(0x0f, 0x00);       //显示测试:1;测试结束,正常显示:0
}


这个在51上运行是没有问题的。

以下是我改写的,请大神们指点:

void max7219_init(void){
        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
        uint8_t cmd[]={0x09,0x00,0x0a,0x03,0x0b,0x07,0x0c,0x01,0x0f,0x00};
        int mi=0;
        for(mi=0;mi<10;mi++){
                HAL_SPI_Transmit(&hspi1,&cmd[mi],1,1000);
        }

        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
}

while(1){
                HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);

                for( j=0;j<3;j++){
                        for( i=0;i<8;i++){
                                command[0] = i;
                                command[1] = dp[j];
                                HAL_SPI_Transmit(&hspi1,&command[0],1,1000);
                                HAL_SPI_Transmit(&hspi1,&command[1],1,1000);
                        }  
                                HAL_Delay(1000);
                }
                        HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);


}

现在这段代码的表现是64个LED全亮,然后就没变化 了。
正确的应该是显示 1,2,3
求指点问题所在 ,谢谢

使用特权

评论回复
沙发
远山寻你| | 2023-7-17 22:05 | 只看该作者
应该是时序不对了吧

使用特权

评论回复
板凳
三生万物| | 2023-7-17 23:14 | 只看该作者
你用的是硬件SPI呗?

使用特权

评论回复
地板
淡漠安然| | 2023-7-18 01:12 | 只看该作者
按理来说,硬件的SPI不用考虑时序问题吧

使用特权

评论回复
5
别乱了阵脚| | 2023-7-18 03:44 | 只看该作者
你和51差别不就是主频么,主频反应的就是时序了

使用特权

评论回复
6
夜阑风雨| | 2023-7-18 05:17 | 只看该作者
你的SPI读写方面,咋弄的?

使用特权

评论回复
7
暖了夏天蓝了海| | 2023-7-18 07:16 | 只看该作者
按理来说,你配置好像也没啥问题吧

使用特权

评论回复
8
江河千里| | 2023-7-18 11:34 | 只看该作者
每次delay1000 是做啥啊?

使用特权

评论回复
9
冰春彩落下| | 2023-7-18 13:05 | 只看该作者
你把1000这个delay去掉试试,感觉你把时序都弄乱了

使用特权

评论回复
10
光辉梦境| | 2023-7-18 15:32 | 只看该作者
不应该啊,要不你用模拟的SPI试试?

使用特权

评论回复
11
一秒落纱| | 2023-7-18 17:21 | 只看该作者
你这传输十次的CMD是控制命令吗?

使用特权

评论回复
12
MessageRing| | 2023-7-18 23:47 | 只看该作者
时序的问题吧

使用特权

评论回复
13
Undshing| | 2023-7-19 23:30 | 只看该作者
硬件spi应该不用考虑时序的

使用特权

评论回复
14
SantaBunny| | 2023-10-25 09:08 | 只看该作者
把1000这个delay去掉试试

使用特权

评论回复
15
Wordsworth| | 2023-12-10 07:28 | 只看该作者

从而达到对电子设备进行静电保护

使用特权

评论回复
16
Clyde011| | 2023-12-10 08:31 | 只看该作者

齐纳二极管的缺点是不如TVS快

使用特权

评论回复
17
万图| | 2023-12-10 10:27 | 只看该作者

就是因为它的作用就是在电子产品设备受到雷击浪涌与ESD静电放电或者其他瞬态电压时

使用特权

评论回复
18
Uriah| | 2023-12-10 11:30 | 只看该作者

这方便一般可以使用底涂的方式来改善

使用特权

评论回复
19
帛灿灿| | 2023-12-10 13:26 | 只看该作者

正常信号一般达不到导通电压

使用特权

评论回复
20
Bblythe| | 2023-12-10 14:29 | 只看该作者

在电子电路中电容一端接电阻

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

427

主题

2725

帖子

3

粉丝