历史上的今天
今天是:2024年10月19日(星期六)
2019年10月19日 | 初学STM32及GPIO入门之流水灯
2019-10-19 来源:eefocus
一.准备工作---建立一个keil工程
STEP1.
打开keil,选择project-new uvision project,建立一个LED工程

STEP2.
在工程文件保存的路径下新建以下文件夹,在官网上或其他渠道下载STM32的3.5版库,将inc 和scr文件夹放入fwlib中。将startup_stm32f10x_hd.s放入asm文件夹中。将库文件放入cmsis中。

STEP3.
在keil中分别新建 【startcode】【user】【fwlib】【cmsis】四个组,再按照下图所示将C文件加入组中。这里要注意的是组里面添加的都是汇编文件和C文件,头文件不需要添加。

STEP4.
为了更好的理清各项文件,我们再设置一下各项输出文件的保存路径
1.设置编译后输出文件的保存路径

2.设置链接输出文件

STEP5.
此时我们若直接编译C文件将会出现很多错误,其原因是 编译器在编译时搜索的默认库一STM32官方驱动的头文件,与inc的差不多,编译至我们的新版本库时存在不兼容,故我们需要屏蔽掉编译器默认库的搜索路径。

添加USE_STDPERIPH_DRIVER:为了使用ST官方库
添加STM32F10X_HD:可以使用库文件里面为大容量定义的寄存器
(补充:芯片是小或中容量的时候宏要换成STM32F10X_LD或STMF10X_MD)

完成!
二.编写程序
程序要求---三个LED灯依次亮后熄灭
完整程序如下
#include "stm32f10x.h"
#define DELAY_TIME 0x3FFFFF
void Delay(__IO uint32_t nCount)
{
for(; nCount != 0; nCount--) ;
}
int main(void)
{
GPIO_InitTypeDef GPIO_InitStructure; /*定义一个GPIO_InitTypeDef类型的结构体*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); /*开启GPIO的外设时钟*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_6|GPIO_Pin_5; /*选择一控制的GPIO引脚*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /*设置引脚模式为通用推挽输出*/
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /*设置引脚速率为50MHz*/
GPIO_Init(GPIOB,&GPIO_InitStructure); /*调用库函数,初始化GPIOC*/
GPIO_Init(GPIOD, &GPIO_InitStructure);
while(1) /*延时装置*/
{
GPIO_SetBits(GPIOB, GPIO_Pin_5);
GPIO_ResetBits(GPIOD, GPIO_Pin_6);
GPIO_ResetBits(GPIOD, GPIO_Pin_3);
Delay(DELAY_TIME);
GPIO_SetBits(GPIOD, GPIO_Pin_6);
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
GPIO_ResetBits(GPIOD, GPIO_Pin_3);
Delay(DELAY_TIME);
GPIO_SetBits(GPIOD, GPIO_Pin_3);
GPIO_ResetBits(GPIOB, GPIO_Pin_5);
GPIO_ResetBits(GPIOD, GPIO_Pin_6);
Delay(DELAY_TIME);
}
}
三.实操过程中出现的问题:
1.三个LED灯分别来自于两个不同的组,在编程过程中时常只记得编写一个组,导致只有一个LED灯保存常量状态。
解决方法:仔细检查程序,分析出现问题的原因。
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:33 编辑 2010年北京电子信息大赛定于5月30号举行,赛方提供xilinx的SOPC开发板,定于4月份发放,就此请大家发一些建设性的培训意见和关于xilinx的sopc的一些技术文档,请大家多多支持。 … 查看全部问答> |
|
五一期间没有闲着,除了5月2日看望父母以外,其余时间都学习LPC1343。经过2天努力,总算对LPC1434有一个大概了解。 今天把学习笔记整理出来,和大家共享。其中免不了对原文的误解,诚心的请大家指正。有些 ...… 查看全部问答> |
|
求救 fatal error RC1015: cannot open include file 'winver.h'. 各位大人 我刚接触wince 今天装好平台 运行hello world 编译就报错 fatal error RC1015: cannot open include file \'winver.h\'. 请高手指点下… 查看全部问答> |
|
紧急求助:开发应用程序要访问USB设备,如何知道该USB2.0设备是否只支持全速呢 1。若主机支持USB2.0,当高速USB设备连接后是否肯定当前工作速度是高速呢?能否人为切换到全速呢? 2。主机是否会检测到USB2.0设备不能支持高速,并将此信息记录在描述符或regedit中呢? 3。若主机支持USB2.0, 且设备当前工作速度是全速,能否断 ...… 查看全部问答> |
|
写的一个很简单的拼音输入程序,想植入windows mobile。我自己水平不行,希望哪个牛人帮忙做一下。愿意帮忙的留下邮箱,我发过来。… 查看全部问答> |
|
我现在已经将spce61板连,probe,电脑接好了,Load的了一个程序,调试状态下,怎么也还是从main可以呢?不连接板的时候调试也是从main开始,我是通过PC指针开始进入程序是一样的,觉的cpu是没有跑起来。要怎样cpu才能跑起来,也是从main开始吗?还 ...… 查看全部问答> |
|
最近一直在搞pxa270的camera的驱动,用的是ov2640,ov9653,现在遇到了一个奇怪的问题,就是YUV预览的时候,我设置dma直接从quick capture的3个数据寄存器到LCD的frame buffer。如果不去读pxa 270 quick capture那边的那3个数据寄存器的话,LCD上只 ...… 查看全部问答> |
|
帮我看下代码C2061 C2660错误原因,我搞好长时间不知道为什么错 给分 帮我看下代码C2061 C2660错误原因,我搞好长时间不知道为什么错: //presetdlgs.h // int ReadHospitalInfo (const char *path, Hospital_Info *hospital_info); //presetdlgs.cpp ...... int ReadHospitalInfo (const char *path ...… 查看全部问答> |




