SPI默认生成工程存在SPI驱动配置不当问题处理

接口/总线/驱动

1139人已加入

描述

1、硬件资源介绍:

RCC

RCC

2、问题描述:

在使用RT-Thread Studio生成的默认工程SPI驱动部分有笔误,导致SPI实际输出频率与配置参数不符合,主要问题点有以下部分:

1、从总线架构上可以看出,N32L40XCL的SPI外设都在APB2总线上,drive部分却把SPI2在APB1上进行分频,导致实际输出频率与参数不符。

if (spi_periph == SPI1)
{
spi_apb_clock = RCC_ClockFreq.Pclk2Freq;
}
else
{
spi_apb_clock = RCC_ClockFreq.Pclk1Freq;//这里应该也为Pclk2Freq
}

2、在配置CLKPHA的捕获边沿重复设置,导致实际输出数据出现偏移

switch(configuration-  >mode & RT_SPI_MODE_3)
{
    case RT_SPI_MODE_0:
        SPI_InitStructure.CLKPOL        = SPI_CLKPOL_LOW;
        SPI_InitStructure.CLKPHA        = SPI_CLKPHA_FIRST_EDGE;
        break;
    case RT_SPI_MODE_1:
        SPI_InitStructure.CLKPOL        = SPI_CLKPOL_LOW;
        SPI_InitStructure.CLKPHA        = SPI_CLKPHA_SECOND_EDGE;
        break;
    case RT_SPI_MODE_2:
        SPI_InitStructure.CLKPOL        = SPI_CLKPOL_HIGH;
        SPI_InitStructure.CLKPHA        = SPI_CLKPHA_FIRST_EDGE;
        break;
    case RT_SPI_MODE_3:
        SPI_InitStructure.CLKPOL        = SPI_CLKPOL_HIGH;
        SPI_InitStructure.CLKPHA        = SPI_CLKPHA_SECOND_EDGE;
        break;
}
...
/* SPI configuration */
SPI_InitStructure.DataDirection = SPI_DIR_DOUBLELINE_FULLDUPLEX;
SPI_InitStructure.SpiMode       = SPI_MODE_MASTER;
//SPI_InitStructure.CLKPHA        = SPI_CLKPHA_SECOND_EDGE; 屏蔽此处
SPI_InitStructure.NSS           = SPI_NSS_SOFT;
SPI_InitStructure.CRCPoly       = 7;

3、目前SPI最高频率拿到的板子实测为16.67MHz(其他分频系数下时钟稳定),对精度要求高的场景需要注意,一般情况下问题不大

RCC

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分