OpenEdv-开源电子网

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

STM32L151 SPI时钟信号异常

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2014-9-26
在线时间
5 小时
发表于 2018-10-31 19:44:37 | 显示全部楼层 |阅读模式
5金钱
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
这是软件配置错误导致的还是硬件的问题,各位帮忙解答一下,多谢!

最佳答案

查看完整内容[请看2#楼]

已解决,引脚复用配置参数有误,正确代码: 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
静以修身,俭以养德
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2014-9-26
在线时间
5 小时
 楼主| 发表于 2018-10-31 19:44:38 | 显示全部楼层
本帖最后由 江湖小强 于 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



回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 13:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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