STM32L151 使用外接8MHz晶振,设置PLL 为32MHz作为系统时钟源。示波器测试PA8引脚MCO输出波形如图。
配置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只有高电平,没有方波。
这是软件配置错误导致的还是硬件的问题,各位帮忙解答一下,多谢!
已解决,引脚复用配置参数有误,正确代码:
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
一周热门 更多>