博文分享 | STM32的IO口基本操作

## STM32的IO口基本操作 ##

“”

1.初始化结构体

先来看下GPIO_InitTypeDef这个结构体,源代码如下

“”

结构体中包含了GPIO_Pin,GPIO_Speed和GPIO_Mode信息,
GPIO_Pin在stm32f10x_gpio.h中有宏定义

“”

刚好对应16个端口。
GPIO_Speed是一个枚举类型的结构体,在stm32f10x_gpio.h中有宏定义:

“”

当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:2MHz、10MHz和50MHz,这个速度是指I/O口驱动电路的速度,是用来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。

高频的驱动电路,噪声也高,当你不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。

当然如果你要输出较高频率的信号,但却选用了较低频率的驱动模块,你很可能会得到失真的输出信号。

关键是,GPIO的引脚速度跟应用匹配。

比如对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。

对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。

对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。

GPIO_Mode也是一个枚举类型的结构体:

“”

2.设置系统时钟

在使用端口前必须要开启外设时钟,在开启外设时钟前我们首先要配置好系统时钟,系统时钟的设置主要在库函数SystemInit()中完成,在启动文件startup_stm32f10x_md.s中有如下一段代码:

“”

在调用main函数之前首先要调用SystemInit()函数,这个函数定义在system_stm32f10x.c中,函数原型为

“”

该函数的主要功能是将配置时钟相关的寄存器都复位为默认值,并调用
SetSysClock(void)函数,

“”

对于SYSCLK_FREQ的宏定义在system_stm32f10x.c文件开头已经给出,默认的系统时钟为72M,当然前提条件是外接8M晶振。

“”

3.开启外设时钟

开启或者关闭外设时钟主要由以下函数设置

“”

不同的外设调用不同的函数,如果使用了io的引脚复用功能除了开启io功能时钟还需要开启复用功能时钟,例如GPIOC的Pin4还可以作为ADC1的输入引脚,当它作为ADC1来使用时,除了开启GPIOC的时钟外,还要开启ADC1的时钟

“”

其他操作函数参看库函数使用手册。

本文转载自:LiYuan199118的博客
转载地址:http://blog.csdn.net/liyuan199118/article/details/50417146
声明:本文为转载文章,转载此文目的在于传递更多信息,版权归原作者所有,如涉及侵权,请联系小编进行处理。