STM32L151 SPI时钟信号异常

2019-07-21 08:14发布

STM32L151 使用外接8MHz晶振,设置PLL 为32MHz作为系统时钟源。示波器测试PA8引脚MCO输出波形如图。
MCO输出波形.jpg
配置SPI1传输数据后,测试发现SPI时钟异常,以下是SPI配置代码,
int spi1_init_cfg(void)
{
        SPI_InitTypeDef t_spi_init_struct;
        GPIO_InitTypeDef t_gpio_init_struct;

        //使能SPI1时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
        //使能GPIOA时钟
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

        //引脚复用配置
        GPIO_PinAFConfig(GPIOA, GPIO_Pin_5, GPIO_AF_SPI1);
        GPIO_PinAFConfig(GPIOA, GPIO_Pin_7, GPIO_AF_SPI1);
        GPIO_PinAFConfig(GPIOA, GPIO_Pin_6, GPIO_AF_SPI1);
       
        //SPI1 SCK 和 MOSI 引脚设置
        t_gpio_init_struct.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
        t_gpio_init_struct.GPIO_Mode = GPIO_Mode_AF;
        t_gpio_init_struct.GPIO_Speed = GPIO_Speed_40MHz;
        t_gpio_init_struct.GPIO_OType = GPIO_OType_PP;
        t_gpio_init_struct.GPIO_PuPd = GPIO_PuPd_DOWN;
        GPIO_Init(GPIOA, &t_gpio_init_struct);

        //SPI1 CS 引脚设置
        t_gpio_init_struct.GPIO_Pin = GPIO_Pin_4;
        t_gpio_init_struct.GPIO_Mode = GPIO_Mode_OUT;
        t_gpio_init_struct.GPIO_Speed = GPIO_Speed_40MHz;
        t_gpio_init_struct.GPIO_OType = GPIO_OType_PP;
        t_gpio_init_struct.GPIO_PuPd = GPIO_PuPd_UP;   
        GPIO_Init(GPIOA, &t_gpio_init_struct);

        SPI_I2S_DeInit(SPI1);

        //SPI1模式设置
        t_spi_init_struct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
        t_spi_init_struct.SPI_Mode = SPI_Mode_Master;
        t_spi_init_struct.SPI_DataSize = SPI_DataSize_8b;
        t_spi_init_struct.SPI_CPOL = SPI_CPOL_Low;
        t_spi_init_struct.SPI_CPHA = SPI_CPHA_1Edge;
        t_spi_init_struct.SPI_NSS = SPI_NSS_Soft;  
        t_spi_init_struct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;//sets BR[2:0] bits - baudrate in SPI_CR1 reg bits 4-6
        t_spi_init_struct.SPI_FirstBit = SPI_FirstBit_MSB;
        t_spi_init_struct.SPI_CRCPolynomial = 7;

        SPI_Init(SPI1, &t_spi_init_struct);

        //使能 SPI1
        SPI_Cmd(SPI1, ENABLE);
    return 0;
}



两次操作SPI1,测量SPI1 CLK引脚示波器波形如下图,CLK只有高电平,没有方波。
SPI1 CLK波形.jpg
这是软件配置错误导致的还是硬件的问题,各位帮忙解答一下,多谢!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
江湖小强
1楼-- · 2019-07-21 08:53
本帖最后由 江湖小强 于 2018-11-6 11:19 编辑

已解决,引脚复用配置参数有误,正确代码:
GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);//SPI1_CLK
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);//SPI1_MOSI
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);//SPI1_MISO



一周热门 更多>