教你用STM一步一步点亮led灯_第1页
教你用STM一步一步点亮led灯_第2页
教你用STM一步一步点亮led灯_第3页
教你用STM一步一步点亮led灯_第4页
教你用STM一步一步点亮led灯_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、STM32之一步一步点亮led (2011-05-09 19:40) 标签:  stm32  led  v3.4  MDK 4.12  入门  分类: stm32  入手stm32以来,一直想快速上手,所以在各大论坛闲逛,各个达人的blog上学习,正所谓欲速则不达,心急是吃不了热豆腐的!有木有? 最终决定使用st官网的库开发,据大侠们写道使用库可以快速上手,貌似的确如此,一个个教程写的那么好,直接拿过来用就是了。可是那么多个库,聪明的你请告诉到底选择哪一个啊?My God!实话实说,我被这些库折腾了个够!好吧,我最

2、后还是承认最后用的是v3.4的库,是很方便!切入正题,点亮LED。硬件:红牛开发板,STM32F103ZET6(144封装).软件: RealView MDK 4.12stm32固件库:v3.4 附上自己整理后的库: V3.4_clean.rar   根据官网库自己整理了下,新建了工程模板如下图:(主要参考文章在Keil MDK+环境下使用STM32 V3.4库.pdf) 在KeilMDK+环境下使用STM32V3.4库.pdf   入图所示:新建一个目录01_ProLed,建议放在英文路径下,

3、避免不必要的麻烦。将上面的库v3.4解压到此目录,再新建一个project目录,存放工程。说明:CMSIS:最底层接口。StartUp:系统启动文件。StdPeriph_Lib:stm32外围设备驱动文件。Project:工程文件。User:用户文件。新建工程步骤:此处略去300字。简单说明:1.core_cm3.c/core_cm3.h 该文件是内核访问层的源文件和头文件,查看其中的代码多半是使用汇编语言编写的。在线不甚了解。-摘自在Keil MDK+环境下使用STM32 V3.4库2.stm32f10x.h 该文件是外设访问层的头文件,该文件是最重要

4、的头文件之一。就像51里面的reg51.h一样。例如定义了 CPU是哪种容量的 CPU,中断向量等等。除了这些该头文件还定义了和外设寄存器相关的结构体,例如:1. typedef struct2. 3.   _IO uint32_t CR;4.   _IO uint32_t CFGR;5.   _IO uint32_t CIR;6.   _IO uint32_t APB2RSTR;7.   _IO uint32_t APB1RSTR;8.   _IO uint32_t AHB

5、ENR;9.   _IO uint32_t APB2ENR;10.   _IO uint32_t APB1ENR;11.   _IO uint32_t BDCR;12.   _IO uint32_t CSR;13.14. #ifdef STM32F10X_CL 15.   _IO uint32_t AHBRSTR;16.   _IO uint32_t CFGR2;17. #endif /* STM32F10X_CL */ 18.19. #if defined (STM32F1

6、0X_LD_VL) | defined (STM32F10X_MD_VL) | defined (STM32F10X_HD_VL) 20.   uint32_t RESERVED0;21.   _IO uint32_t CFGR2;22. #endif /* STM32F10X_LD_VL | STM32F10X_MD_VL | STM32F10X_HD_VL */ 23. RCC_TypeDef;包含了那么多寄存器的定义,那么在应用文件中(例如自己编写的 main 源文件)只需要包含stm32f10x.h即可,而不是以前固件库的需要包含 stm32f1

7、0x_conf.h这个头文件。-摘自在Keil MDK+环境下使用STM32 V3.4库3.system_stm32f10x.c/h 该头文件也可以称为外设访问层的头文件和源文件。在该文件中可以定义系统的时钟频率,定义低速时钟总线和高速时钟总线的频率,其中最关键的函数就是 SystemInit()了,这个后面会详细介绍。总之这两个文件是新固件库的重点,有了它粮也大大简化了使用 stm32的初始化工作。-摘自在Keil MDK+环境下使用STM32 V3.4库4.stm32f10x_conf.h 这个文件和 V2 版本的库的内容是一样的

8、,需要使用哪些外设就取消哪些外设的注释。例如需要使用 GPIO功能,但不使用 SPI功能,就可以这样操作。-摘自在Keil MDK+环境下使用STM32 V3.4库1. #include"stm32f10x_gpio.h"2. /*#include"stm32f10x_spi.h"*/5.main.c 这个文件就不用多说了,自己编写。 -摘自在Keil MDK+环境下使用STM32 V3.4库 6.stm32f10x_it.c/h 这两个文件包含了 stm32中断函数,在源文

9、件和头文件中并没有把所有的中断入口函数都写出来,而只写了 ARM内核的几个异常中断,其他的中断函数需要用户自己编写。-摘自在Keil MDK+环境下使用STM32 V3.4库OK,开始写代码了。由于3.4的库在启动的时候已经设置好时钟了(将在后面有讲述),所以我们只需设置好对应的GPIO即可。查看硬件连接:来点亮PF6.新建led.c与led.h,添加到User Code下面。led.h1. #ifndef _LED_H_2. #define _LED_H_3.4. void Delay(uint32_t times);5. void LedInit(void);6.7.

10、#endifled.c1. #include "stm32f10x.h"2.3. /*4.5. * 函数名 :LedInit(void)6.7. * 描述 :8.9. * 输入 :无10.11. * 输出 :无12.13. * 返回 :无14.15. */16.17. void LedInit(void)18. 19.     GPIO_InitTypeDef GPIO_InitStructure; 20.21.     /*初始化 GPIOF的 Pin_6为推挽输出*/22.  &#

11、160;  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;23.     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;24.     GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;25.     GPIO_Init(GPIOF,&GPIO_InitStructure);26.     27.

12、28.29. /*30.31. * 函数名 :Delay(uint32_t times)32.33. * 描述 :延时函数34.35. * 输入 :uint32_t times36.37. * 输出 :无38.39. * 返回 :无40.41. */42. void Delay(uint32_t times)43. 44.   while(times-)45.   46.      uint32_t i;47.      for (i=0; i<0xffff; i+)4

13、8.      ;49.   50. 在main.c中加入led初始化与点亮关闭即可。1. /*!< At this stage the microcontroller clock setting is already configured, 2.        this is done through SystemInit() function which is called from startup3.     &#

14、160;  file (startup_stm32f10x_xx.s) before to branch to application main.4.        To reconfigure the default setting of SystemInit() function, refer to5.        system_stm32f10x.c file6.      */

15、 7.8.   /* Add your application code here9.      */ 10.11.     /*初始化 GPIOF时钟*/12.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);  13.14.     LedInit();15.     16.  &

16、#160;/* Infinite loop */17.   while (1)18.   19.        /*关闭 LED1*/20.         GPIO_SetBits(GPIOF,GPIO_Pin_6);21.         /*延时*/22.       &#

17、160; Delay(50);23.         /*点亮 LED1*/24.         GPIO_ResetBits(GPIOF,GPIO_Pin_6);25.         /*延时*/26.         Delay(50);  

18、  27.   认真学习下这段代码,其实也非常简单,参考自在Keil MDK+环境下使用STM32 V3.4库。我想请大家注意的是前面的一段英文注释,这段英文注释什么意思呢。“在运行 main 函数之前,系统时钟已经完成初始化工作,在main函数之前,通过调用启动代码运行了 SystemInit函数,而这个函数位于system_stm32f10x.c”。根据文中的提示我们回到 system_stm32f10x.c 看看 SystemInit如何初始化系统的。在 system_stm32f10x.c 的开头便定义了系统的时钟频率,从下面

19、的这段代码可以看出系统的频率被定义为 72MHZ,这也是绝大多数 STM32运行时的频率。 1. #if defined (STM32F10X_LD_VL) | (defined STM32F10X_MD_VL) | (defined STM32F10X_HD_VL)2. /* #define SYSCLK_FREQ_HSE HSE_VALUE */3.  #define SYSCLK_FREQ_24MHz 240000004. #else5. /* #define SYSCLK_FREQ_HSE HSE_VALUE */6. /* #define SYSCLK_FREQ_

20、24MHz 24000000 */ 7. /* #define SYSCLK_FREQ_36MHz 36000000 */8. /* #define SYSCLK_FREQ_48MHz 48000000 */9. /* #define SYSCLK_FREQ_56MHz 56000000 */10. #define SYSCLK_FREQ_72MHz 7200000011. #endif紧接着根据这个宏定义程序试图把系统时钟初始化为 72MHz,代码有点冗长,这里就不一一列出。在SystemInit 函数中,调用了 SetSysClock 函数,如果设定时钟的频率为 72MHZ 则 SetSy

21、sCloc 调用SetSysClockTo72函数,该函数和 V2 版本固件库中的各范例中的 RCC_Configuration很相似,主要完成把外部时钟 9 倍频后分配给系统时钟,APB1 时钟和 APB2又由系统时钟分频获得。关键代码如下:1. /* HCLK = SYSCLK */2.     RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;3.       4.     /* PCLK2 = HCLK */5.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;6.     7.     /* PCLK1 = HCLK */8.     RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;从上面的分析可以看出,Sys

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论