本帖最后由 liusheng1998 于 2023-1-14 18:58 编辑
#21ic问答# 主要问题:spi检测不到SCK输出。
编译环境:keil。硬件:stm32f407zg正点原子探索者开发板+逻辑分析仪.已跑例程,确认硬件引脚输出正常
工程背景:想用SPI传输控制CAN外扩芯片MCP2515,已使用2路CAN,TX/RX引脚占用分别为D1/D0、B12/B13.
SPI选择的是SPI1 ,使用引脚定为PB3 PB4 PB5 作为SPI sck miso mosi,以及PB14作为片选引脚。
SPI.C代码如下#include "sys.h"
#include "spi.h"
//以下是SPI模块的初始化代码,配置成主机模式
//SPI口初始化
//这里针是对SPI1的初始化
void SPI1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOG, ENABLE);//使能GPIOB时钟 A是片选信号的PA15 所需要的
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);//使能SPI1时钟 2
//GPIOFB3,4,5初始化设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;//PB3~5复用功能推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能 3
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//100MHz
// GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//不上拉 也不下拉
//修改 将有引脚状态由上拉 改为不上拉也不下拉 再改为GPIO_PuPd_DOWN
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
//设置片选脚的配置
GPIO_InitTypeDef GPIO_initStruct1;
GPIO_initStruct1.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通的OUT IO口
GPIO_initStruct1.GPIO_OType =GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_initStruct1.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init(GPIOB,&GPIO_initStruct1);//配置片选信号
//****************************************************************
|