001 - STM的GPIO端口操作实验

发布时间:2015-04-24 11:02:08   来源:文档文库   
字号:

//main()程序开始…… //注释

//1.2.1 头文件:

#include "stm32f10x.h"  //意思是,把文件stm32f10x_lib.h的内容放到此处

#include "main.h"  //意思是,把文件main.h的内容放到此处

//#include "k_gpio.h" //注释

#define VECT_TAB_RAM   //选择在RAM中调试;宏标识符 宏体

1.2.2 系统初始化 

SystemInit();   //选择系统运行时钟,默认是72MHz,可以调试跟踪进行修改;  

#ifdef  VECT_TAB_RAM //设置仿真调试区域,这里设置成在RAM中; 

// Set the Vector Table base location at 0x20000000

NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);  

#else  /* VECT_TAB_FLASH  */       

// Set the Vector Table base location at 0x08000000       

NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);  

#endif 

1.2.3 GPIO配置 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);      //首先使能B端口时钟才可以进行下面的配置

//扩展学习RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOA| RCC_APB2Periph_GPIOA, ENABLE);     //使能BAC端口时钟

GPIO_InitTypeDef gpio //第二步 声明一个gpio结构体

 gpio.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //第三步选择待设置的GPIO管脚,这里是12,13,14,15

gpio.GPIO_Speed = GPIO_Speed_50MHz;   //第四步设置最高输出速率 50MHz

gpio.GPIO_Mode = GPIO_Mode_Out_PP;  //第五步设置选中GPIO管脚的模式推挽输出

GPIO_Init(GPIOB, &gpio);     //第六步根据gpio中指定的参数初始化外设,这里是B端口(GPIOB)

GPIO_SetBits(GPIOB, GPIO_Pin_12| GPIO_Pin_13| GPIO_Pin_14| GPIO_Pin_15);  //置位B12B12B14B15LED灯; 

//GPIO_SetBits(GPIOB, GPIO_Pin_13); //置位B13//已经用上句代替

//GPIO_SetBits(GPIOB, GPIO_Pin_14); //置位B14//已经用上句代替

//GPIO_SetBits(GPIOB, GPIO_Pin_15); //置位B15//已经用上句代替

//如此,GPIOB连接LED的四个端口都配置好了; 

1.2.4 GPIO操作 

While(1) 

  GPIO_ResetBits(GPIOB, GPIO_Pin_12);   //复位B12,灯亮

Delay(0xffffff);   //延时,系统时钟16M时,示波器测得10.49s

GPIO_ResetBits(GPIOB, GPIO_Pin_13);   

Delay(0xffffff); 

GPIO_ResetBits(GPIOB, GPIO_Pin_14); 

Delay(0xffffff);   

GPIO_ResetBits(GPIOB, GPIO_Pin_15);   

Delay(0xffffff);   

Delay(0xffffff);   

Delay(0xffffff); 

   

GPIO_SetBits(GPIOB, GPIO_Pin_12);   //置位,灭灯,功能等同速度更快的是GPIOB->BSRR=GPIO_Pin_12BSRR寄存器置1

Delay(0xffffff); 

GPIO_SetBits(GPIOB, GPIO_Pin_13);   // GPIOE->BSRR = 0x00400080//16位的某位为'1',则对应的I/O端口置'1';16位的某位为'1',则对应的I/O端口置'0'

Delay(0xffffff);  // 上行例子是0X0040=6=00080=7=1其他位不变

GPIO_SetBits(GPIOB, GPIO_Pin_14);       // GPIOE->BRR = 0x00400080//16位的某位为'1',则对应的I/O端口置'0';16位的某位为'1',则对应的I/O端口置'1'

Delay(0xffffff);  // 上行例子是0X0040=6=10080=7=0其他位不变

GPIO_SetBits(GPIOB, GPIO_Pin_15);   

Delay(0xffffff); 

   

//GPIO_ResetBits(GPIOB, GPIO_Pin_12);  //先不用

//GPIO_ResetBits(GPIOB, GPIO_Pin_13);  //先不用

//GPIO_ResetBits(GPIOB, GPIO_Pin_14);  //先不用

//GPIO_ResetBits(GPIOB, GPIO_Pin_15); //先不用SysCtlDelay(SysCtlClockGet() / 3000); // 与系统时钟无关,精确延时1ms

如此而已;这是最简单的实验,可以为此建立一个拥有自己特色的工程模板; 

1.3 Test注意 

A、硬件必须首先确保正确; 

B、开发环境搭建确保正确; 

C、系统时钟的选择要清楚;仿真所处的区域要清楚; 

D、外设时钟的配置是第一位的,其他配置都在其后

本文来源:https://www.2haoxitong.net/k/doc/0fa50fc1c77da26925c5b0e4.html

《001 - STM的GPIO端口操作实验.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式