//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); //使能B,A,C端口时钟
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); //置位B12,B12,B14,B15灭LED灯;
//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_12,BSRR寄存器置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位=0;0080=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位=1;0080=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
文档为doc格式