今天调试了ad7606 基于stm32F429的spi模式,发现stm32,clk没有信号输出,认为是初始化配置没有做好,检查了GPIO的初始化,spi的初始化,开始没有发现什么异常,后来发现例程的个GPIO配置应该为PULLUP模式如下图
/* 硬件SPI */ GPIO_InitTypeDef GPIO_InitStructure; /* 开启GPIO时钟 */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); /* 开启SPI时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); /* 配置 SCK, MISO 、 MOSI 为复用功能 */ //GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_SPI3); //GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_SPI3); //GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_SPI3); /* 配置 SCK, MISO 、 MOSI 为复用功能 */ GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_SPI1); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; GPIO_Init(GPIOB, &GPIO_InitStructure); /* 打开SPI时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
改为
/* 硬件SPI */ GPIO_InitTypeDef GPIO_InitStructure; /* 开启GPIO时钟 */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); /* 开启SPI时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); /* 配置 SCK, MISO 、 MOSI 为复用功能 */ //GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_SPI3); //GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_SPI3); //GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_SPI3); /* 配置 SCK, MISO 、 MOSI 为复用功能 */ GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_SPI1); GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_SPI1); GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_25MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //注意改这里 GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5; GPIO_Init(GPIOB, &GPIO_InitStructure); /* 打开SPI时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
我用的是安富莱的ad7607模块发现没有外部基准,而且比较贵,120大洋一个,太贵了,黑金的199大洋,准备做一批模块,价位在100以内。现在把安富莱的资料跟大家分享下,不过stm32f407的硬spi例程有上面的问题,卡了半天。
链接:https://pan.baidu.com/s/1miVIGJ2 密码:9xrc