OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2154|回复: 1

F429 SPI3问题

[复制链接]

6

主题

13

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2018-1-17
在线时间
13 小时
发表于 2018-4-19 14:09:16 | 显示全部楼层 |阅读模式
5金钱
我的程序原来在SPI1上面时成功的,但是改到SPI3就不行了,问了正点原子的店铺的技术人员,他们说429是不需要禁用JTAG的。调了一整天就是没有通过。我用的引脚:CS-PA15,SCK-PB3,MOSI-PB5,MISO-PB4。如果不是禁用的问题的话,那就是我SPI3的配置是有问题的,但是我核对了很多遍,感觉没有错啊,请各位帮忙看一下吧。
[mw_shl_code=c,true]SPI_HandleTypeDef SPI3_Handler; //SPI 句柄
GPIO_InitTypeDef GPIO_Initure;
/*********SPI初始化SPI3************/
void LD3320_SPI_Cfg(void)
{       
        LD3320_CS=1;//CS初始化时置高,使用选择时置低
        SPI3_Init();
        SPI3_SetSpeed(SPI_BAUDRATEPRESCALER_2);//设置为45M时钟,高速模式
        printf("SPI初始化完成\r\n");
}

/*============SPI3层驱动,时钟使能,引脚配置=================*/
void SPI3_Init(void)
{
        __HAL_SPI_DISABLE(&SPI3_Handler);
       
        SPI3_Handler.Instance=SPI3; //SP1
        SPI3_Handler.Init.Mode=SPI_MODE_MASTER; //设置 SPI 工作模式,设置为主模式
        SPI3_Handler.Init.Direction=SPI_DIRECTION_2LINES; // SPI 设置为双线模式
        SPI3_Handler.Init.DataSize=SPI_DATASIZE_8BIT; // PI 发送接收 8 位帧结构
        SPI3_Handler.Init.CLKPolarity=SPI_POLARITY_HIGH; //注:官方源码为高,但官方注释上为低。同步时钟空闲状态为低电平
        SPI3_Handler.Init.CLKPhase=SPI_PHASE_1EDGE;//时钟相位 数据采样从第一个时钟边沿开始
        SPI3_Handler.Init.NSS=SPI_NSS_SOFT; //软件产生NSS       
        SPI3_Handler.Init.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_256;//定义波特率预分频的值:波特率预分频值为SYSCLK/128
        SPI3_Handler.Init.FirstBit=SPI_FIRSTBIT_MSB; //指定数据传输从 MSB 位开始,数据高位在前
        SPI3_Handler.Init.TIMode=SPI_TIMODE_DISABLE; //关闭 TI 模式
        SPI3_Handler.Init.CRCCalculation=SPI_CRCCALCULATION_DISABLE;//使能硬件 CRC
        SPI3_Handler.Init.CRCPolynomial=7; //CRC 值计算的多项式,CRC多项式寄存器初始值为7
        HAL_SPI_Init(&SPI3_Handler);//初始化
       
        __HAL_SPI_ENABLE(&SPI3_Handler); //使能 SPI1
       
//        spi_send_byte(0Xff);        //启动传输
        printf("SPI3_Init\r\n");
}


/*============SPI3底层驱动,时钟使能,引脚配置=================*/
//此函数会被 HAL_SPI_Init()调用
void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
{
        if(hspi->Instance==SPI3)
        {
                __HAL_RCC_GPIOB_CLK_ENABLE(); //使能IO口时钟
                __HAL_RCC_SPI3_CLK_ENABLE(); //使能 SPI3 时钟
                GPIO_Initure.Pin=        GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5;//SCK
                GPIO_Initure.Mode=GPIO_MODE_AF_PP; //复用推挽输出       
                GPIO_Initure.Speed=GPIO_SPEED_HIGH;
                GPIO_Initure.Pull=GPIO_PULLUP;//上拉
                GPIO_Initure.Alternate=GPIO_AF5_SPI3; //复用为 SPI1
                HAL_GPIO_Init(GPIOB,&GPIO_Initure);       
               
                __HAL_RCC_GPIOA_CLK_ENABLE();
                GPIO_Initure.Pin=GPIO_PIN_15;  //CS
                GPIO_Initure.Mode=GPIO_MODE_AF_PP; //推挽输出
                GPIO_Initure.Speed=GPIO_SPEED_HIGH; //50MHz
                GPIO_Initure.Pull=GPIO_PULLUP; //上拉
                GPIO_Initure.Alternate=GPIO_AF5_SPI3; //复用为 SPI1
                HAL_GPIO_Init(GPIOA,&GPIO_Initure);
        }
                printf("SPI回调函数\r\n");       
}
//SPI 速度设置函数
void SPI3_SetSpeed(u8 SPI_BaudRatePrescaler)
{
        assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));//判断有效性
        __HAL_SPI_DISABLE(&SPI3_Handler); //关闭 SPI
        SPI3_Handler.Instance->CR1&=0XFFC7; //位 3-5 清零,用来设置波特率
        SPI3_Handler.Instance->CR1|=SPI_BaudRatePrescaler;//设置 SPI 速度
        __HAL_SPI_ENABLE(&SPI3_Handler); //使能 SPI
        printf("SPI速度初始化完成\r\n");
}[/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

6

主题

13

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2018-1-17
在线时间
13 小时
 楼主| 发表于 2018-4-19 14:16:36 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 05:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表