先说说我对STM32 IO口的认识吧。
刚开始学习一款单片机的时候一般都是从操作IO口开始的,所以我也一样,先是弄个流水灯。
刚开始我对STM32的认识不够,以为是跟51单片机类似,可以直接操作端口,可是LED灯却没反应,于是乎,仔细查看资料发现,原来对于ARM,不管你要操作哪个IO口,都要先配置IO口。
不过对于普通的IO口的应用,配置会比较简单,主要就以下几个步骤:
1.打开相应IO口的时钟;
2.打开IO口相应引脚位;
3.配置IO口的模式;
4.初始化IO端口。
对于STM32的IO口可以根据需要由软件配置成8种模式:
1.输入浮空;
2.输入上拉;
3.输入下拉;
4.模拟输入;
5.开漏输出;
6.推挽输出;
7.推挽式复用功能;
8.开漏复用功能
那么我就把IO初始化端口的部分程序贴出来大家共享。
/***************************************************************************************
****************************************************************************************
* FILE : LED.c
* Description : LED flash
*
* Study STM32 record.
*
* History:
LED0 PA.0
LED1 PA.1
LED2 PA.12
LED3 PA.13
LED4 PA.14
LED5 PA.15
* Version Name Date Description
1.0 Penny 2013.05.31
****************************************************************************************
****************************************************************************************/
#include "ms5.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; //LED0-->PB.0 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化PB口
GPIO_SetBits(GPIOB,GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);//PB.0 输出高
delay_ms(10);
GPIO_ResetBits(GPIOB,GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15);
}
用户1595735 2013-6-25 09:31