OpenEdv-开源电子网

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

F429 SPI3使用问题

[复制链接]

6

主题

13

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2018-1-17
在线时间
13 小时
发表于 2018-4-19 14:19:36 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 素怀 于 2018-4-19 18:13 编辑

我的程序原来在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_RCC_SPI3_CLK_ENABLE(); //使能 SPI3 时钟
        __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 时钟
                __HAL_RCC_GPIOA_CLK_ENABLE();               

                GPIO_Initure.Pin=GPIO_PIN_4;  //CS
                GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
                GPIO_Initure.Speed=GPIO_SPEED_HIGH; //50MHz
                GPIO_Initure.Pull=GPIO_PULLUP; //上拉       
                HAL_GPIO_Init(GPIOA,&GPIO_Initure);
               
                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_AF6_SPI3; //复用为 SPI1
                HAL_GPIO_Init(GPIOB,&GPIO_Initure);       
               


        }[/mw_shl_code]

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

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5140
金钱
5140
注册时间
2014-8-26
在线时间
1317 小时
发表于 2018-4-19 17:55:51 | 显示全部楼层
本帖最后由 login_FAE 于 2018-4-19 18:07 编辑

[mw_shl_code=c,true]void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
{
    GPIO_InitTypeDef GPIO_Initure;
   
    __HAL_RCC_GPIOB_CLK_ENABLE();       //使能GPIOF时钟
    __HAL_RCC_SPI3_CLK_ENABLE();        //使能SPI5时钟
   
    //PB3,4,5
    GPIO_Initure.Pin=GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5;
    GPIO_Initure.Mode=GPIO_MODE_AF_PP;              //复用推挽输出
    GPIO_Initure.Pull=GPIO_PULLUP;                  //上拉
    GPIO_Initure.Speed=GPIO_SPEED_FAST;             //快速            
    GPIO_Initure.Alternate=GPIO_AF5_SPI3;           //复用为SPI3
    HAL_GPIO_Init(GPIOB,&GPIO_Initure);
}[/mw_shl_code]
看是不是这里问题
回复

使用道具 举报

6

主题

13

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2018-1-17
在线时间
13 小时
 楼主| 发表于 2018-4-19 18:04:15 | 显示全部楼层
暂时解决了一半问题,把我SPI3的接口改到了PC10、11、12,然后我的复用写错了,应该是GPIO_Initure.Alternate=GPIO_AF6_SPI3; 这样程序就调对了。但是又改回PB3、4、5,程序依旧不能正常运行
回复

使用道具 举报

6

主题

13

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2018-1-17
在线时间
13 小时
 楼主| 发表于 2018-4-19 18:22:27 | 显示全部楼层
login_FAE 发表于 2018-4-19 17:55
[mw_shl_code=c,true]void HAL_SPI_MspInit(SPI_HandleTypeDef *hspi)
{
    GPIO_InitTypeDef GPIO_Init ...

我一开始是这么写的,就是有问题,我也觉得这样写是对的
回复

使用道具 举报

5

主题

20

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2018-12-11
在线时间
67 小时
发表于 2019-6-11 17:07:59 | 显示全部楼层
PB的SPI3你弄出来了吗
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-15 01:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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