资源描述:
《GPIO复用功能教学内容.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、管脚的复用功能重映1、复用功能:内置外设是与I/O口共用引出管脚(不同的功能对应同一管脚)STM32所有内置外设的外部引脚都是与标准GPIO引脚复用的,如果有多个复用功能模块对应同一个引脚,只能使能其中之一,其它模块保持非使能状态。2、重映射功能:复用功能的引出脚可以通过重映射,从不同的I/O管脚引出,即复用功能的引出脚位是可通过程序改变到其他的引脚上!直接好处:PCB电路板的设计人员可以在需要的情况下,不必把某些信号在板上绕一大圈完成联接,方便了PCB的设计同时潜在地减少了信号的交叉干扰。如:USART1:0:没有重映像(TX/PA9,RX
2、/PA10);1:重映像(TX/PB6,RX/PB7)。(参考AFIO_MAPR寄存器介绍)[0,1为一寄存器的bit值]【注】下述复用功能的引出脚具有重映射功能:-晶体振荡器的引脚在不接晶体时,可以作为普通I/O口-CAN模块;-JTAG调试接口;-大部分定时器的引出接口;-大部分USART引出接口-I2C1的引出接口;-SPI1的引出接口;举例:对于STM32F103VBT6,47引脚为PB10,它的复用功能是I2C2_SCL和USART3_TX,表示在上电之后它的默认功能为PB10,而I2C2的SCL和USART3的TX为它的复用功能;
3、另外在TIM2的引脚重映射后,TIM2_CH3也成为这个引脚的复用功能。(1)要使用STM32F103VBT6的47、48脚的USART3功能,则需要配置47脚为复用推挽输出或复用开漏输出,配置48脚为某种输入模式,同时使能USART3并保持I2C2的非使能状态。(2)使用STM32F103VBT6的47脚作为TIM2_CH3,则需要对TIM2进行重映射,然后再按复用功能的方式配置对应引脚.下面跟大家说一下STM32单片机的端口重映射,因为是以自己为实例.这里是以USART1的重映射为例STM32上有很多I/O口,也有很多的内置外设想I2C,
4、ADC,ISP,USART等,为了节省引出管脚,这些内置外设基本上是与I/O口共用管脚的,也就是I/O管脚的复用功能。但是STM32还有一特别之处就是:很多复用内置的外设的I/O引脚可以通过重映射功能,从不同的I/O管脚引出,即复用功能的引脚是可通过程序改变的.以上是我在配置GPIO管脚PA9PA10时没有发现的复用功能,直到我添加了RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);这个函数才通。使用了IO的复用功能就一定要启动RCC_APB2Periph_AFIO的Clock的重映射步骤为
5、:1.打开重映射时钟和USART重映射后的I/O口引脚时钟, RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA
6、RCC_APB2Periph_AFIO,ENABLE);2.I/O口重映射开启. GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);3.配制重映射引脚, 这里只需配置重映射后的I/O,原来的不需要去配置. GPIO_InitStructure.
7、GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO
8、_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure); 只需要这三步,串口就可以正常使用了,简单吧? 但是我纠结了大半个小时才搞定的,好多事情都是说起来容易做起来难的,希望我以后多多进步.不要眼高手低,嗯我正朝这个方向
9、前进.最后总结一下:
简单的说STM32的io有3个功能一个是默认的一个是复用一个是重映射功能(这个其实也属于复用)
如果配置成复用则将使用第2个功能如果配置成复用