STM32F10系列的管脚复用功能和AFIO

       最近用stm32的spi接口和ti的cc3000通信,首先配置spi接口,按照网络关于spi接口的配置例程配置好以后,发现spi不工作,用while循环发送数据时,clk和mosi管脚没有输出信号,然后各种找问题:首先检查时钟,然后看看各个管脚能不能被置位,复位,发现其GPIO功能都是正常的。后来认真看手册,找出了原因,就是管脚的复用功能没有注意。仅仅看人家的历程,不理解为何这么做是行不通的。

       spi的配置下,要开启GPIO口的时钟,外设spi的时钟,例如spi1的话:RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 |RCC_APB2Periph_GPIOA,ENABLE);

由于spi功能是gpio的一个复用功能,所以在定义管脚时,要选择复用模式的下的输入输出模式。一般情况下的IO口在复位后变成默认的GPIO功能,其复用的功能要对它进行配置才能工作,如stm32f10xx系列的PA5其复位以后是普通IO口,其复用功能才是spi口clk管脚,所以在配置PA5为clk管脚时要选择复用下的模式,就是GPIO_Mode_AF_PP和GPIO_Mode_AF_OD中的一种。不能选择其它的输出模式。这一点在数据手册中也有相关的说明。当时就是没有注意这个细节,浪费了3个小时的时间。

              查阅了一些资料,对管脚复用和管脚映射方面的概念做一下总结。管脚复用和管脚映射都是为了实现stm32外设功能而提出的概念,将默认的实现外设功能的引脚用其它可选的引脚来实现外设功能较管脚映射。管脚映射时要开启AFIO时钟,在下面的三种情况下要开启AFIO时钟:管脚重映射、外部中断EXTI、事件。要使用复用功能时,要开启外设(相对于m3内核而言st自己加入的外设,如spi接口,iis接口,ad等)的GPIO口时钟,同时开启外设的时钟,输出管脚选择GPIO_Mode_AF_PP和GPIO_Mode_AF_OD中的一种,使能外设模块。



你可能感兴趣的:(嵌入式)