新手上路
- 积分
- 25
- 金钱
- 25
- 注册时间
- 2021-2-26
- 在线时间
- 5 小时
|
10金钱
本人想点亮一款MAX7219的led板子,在咱们这论坛上下载了一个f1的例子,按照自己需要修改配置spi,发现怎么也无法点亮,我用的是f4开发板,计划用spi3,pc10、11、12分别复用为clk、cs、din。麻烦各位大佬看一下,是什么地方有问题。main函数
#include "stm32f4xx.h"
#include "delay.h"
#define Max7219_pinCLK PCout(10)
#define Max7219_pinCS PCout(11)
#define Max7219_pinDIN PCout(12)
void SPI3_Init(void)
{
SPI_InitTypeDef SPI3_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
//配置SPI1管脚
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOA, ENABLE);
//RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOC时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);//使能SPI3时钟
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOC,&GPIO_InitStructure);
GPIO_PinAFConfig(GPIOC,GPIO_PinSource10,GPIO_AF_SPI3); //PB3复用为 SPI1
GPIO_PinAFConfig(GPIOC,GPIO_PinSource12,GPIO_AF_SPI3); //PB3复用为 SPI1
//这里只针对SPI口初始化
RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3,ENABLE);//复位SPI1
RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3,DISABLE);//停止复位SPI1
SPI3_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;
SPI3_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_64;
SPI3_InitStructure.SPI_DataSize=SPI_DataSize_8b;
SPI3_InitStructure.SPI_Mode=SPI_Mode_Master;
SPI3_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB; //高位在先
SPI3_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI3_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPI3_InitStructure.SPI_NSS = SPI_NSS_Hard; // 使用硬件模式,PA4需要接高电平
SPI3_InitStructure.SPI_CRCPolynomial = 7;
SPI_I2S_DeInit(SPI3);
SPI_Init(SPI3, &SPI3_InitStructure);
SPI_Cmd(SPI3, ENABLE);
}
//-------------------------------------------
//功能:向MAX7219写入数据
//入口参数:address、dat
//出口参数:无
//说明:
void Write_Max7219(u8 address,u8 dat)
{
GPIO_ResetBits(GPIOC, GPIO_Pin_11);
SPI_I2S_SendData(SPI3, address); //写入地址,即数码管编号
delay_us(10);
SPI_I2S_SendData(SPI3, dat); //写入数据,即数码管显示数字
delay_us(10);
GPIO_SetBits(GPIOC, GPIO_Pin_11);
}
void Init_MAX7219(void)
{
Write_Max7219(0x09, 0xff); //译码方式:BCD码
Write_Max7219(0x0a, 0x03); //亮度
Write_Max7219(0x0b, 0x07); //扫描界限;8个数码管显示
Write_Max7219(0x0c, 0x01); //掉电模式:0,普通模式:1
Write_Max7219(0x0f, 0x00); //显示测试:1;测试结束,正常显示:0
}
int main(void)
{
delay_init();
SPI3_Init();
Init_MAX7219();
Write_Max7219(0x01, 0x00);
Write_Max7219(0x02, 0x01);
Write_Max7219(0x03, 0x02);
Write_Max7219(0x04, 0x03);
Write_Max7219(0x05, 0x04);
Write_Max7219(0x06, 0x05);
Write_Max7219(0x07, 0x06);
Write_Max7219(0x08, 0x07);
while(1)
{
}
}
|
-
-
|