红牛开发板非固件库控制LED.doc_第1页
红牛开发板非固件库控制LED.doc_第2页
红牛开发板非固件库控制LED.doc_第3页
全文预览已结束

下载本文档

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

文档简介

STM32红牛开发板非固件库控制LED10/05/23摘要 STM32红牛开发板上的5个LED,接在GPIOF610脚,输出低电平时,LED亮。这样我们设置GPIOF的相关寄存器,让其输出低电平就可以让LED亮。因为没有用到ST提供的固件库,所以是直接对寄存器的内存地址读写,即对一个指向该地址的指针变量进行读写。并且该变量必须为易变型的,即用volatile定义,这样是为了告诉编译器不要去优化这个变量,导致其它一些寄存器的数据变化。GPIOx是挂载在APB2高速外设总线上的,最大频率是72MHZ,所以我们除了了打开HSE(外部高速时钟)并关闭内部高速时钟(开机默认选择了HSI)外,还要打开APB2总线的时钟。一、 寄存器地址映射外设的基址PERIPH_BASE 为0x40000000,APB1外设在前面,所以基址APB1PERIPH_BASE等于PERIPH_BASE,APB2外设基址APB2PERIPH_BASE为PERIPH_BASE + 0x10000,最后AHB基址是PERIPH_BASE + 0x20000.GPIOx是挂载在APB2总线了的,从(APB2PERIPH_BASE + 0x0800)开始,每0x400字节空间为一组IO口的寄存器。所以GPIOF_BASE为(APB2PERIPH_BASE + 0x1C00)。结合芯片手册,GPIOF各寄存器地址如下:/*GPIOF外设寄存器地址映射*/#defineGPIOF_CRL (*(volatile unsigned long *) (GPIOF_BASE + 0x00)#defineGPIOF_CRH (*(volatile unsigned long *) (GPIOF_BASE + 0x04)#defineGPIOF_IDR (*(volatile unsigned long *) (GPIOF_BASE + 0x08)#defineGPIOF_ODR (*(volatile unsigned long *) (GPIOF_BASE + 0x0C)#defineGPIOF_BSRR (*(volatile unsigned long *) (GPIOF_BASE + 0x10)#defineGPIOF_BRR (*(volatile unsigned long *) (GPIOF_BASE + 0x14)#defineGPIOF_LCKR (*(volatile unsigned long *) (GPIOF_BASE + 0x18)时钟控制寄存器基址RCC_BASE 为(AHBPERIPH_BASE + 0x1000),由同样方法可以得出RCC各寄存器地址如下:/*RCC寄存器地址映射*/#defineRCC_CR (*(volatile unsigned long *) (RCC_BASE + 0x00)#defineRCC_CFGR (*(volatile unsigned long *) (RCC_BASE + 0x04)#defineRCC_CIR (*(volatile unsigned long *) (RCC_BASE + 0x08)#defineRCC_APB2RSTR(*(volatile unsigned long *) (RCC_BASE + 0x0C)#defineRCC_APB1RSTR(*(volatile unsigned long *) (RCC_BASE + 0x10)#defineRCC_AHBENR (*(volatile unsigned long *) (RCC_BASE + 0x14)#defineRCC_APB2ENR (*(volatile unsigned long *) (RCC_BASE + 0x18)#defineRCC_APB1ENR (*(volatile unsigned long *) (RCC_BASE + 0x1C)#defineRCC_BDCR(*(volatile unsigned long *) (RCC_BASE + 0x20)#defineRCC_CSR (*(volatile unsigned long *) (RCC_BASE + 0x24)至此,得到上面数据,对这些寄存器操作,我们就可以控制红牛开板的上的5个LED了。二、 程序编写1、 启动代码启动代码直接使用ST提供的默认启动代码,由于我的开发板是大容量FLASH的STM32F103ZET6,所以用的启动代码是startup_stm32f10x_hd.s。2、 时钟配置RCC_Configuration跳转到MAIN函数后,程序第一件要做的事情就是配置系统时钟。由HSE直接作为系统时钟。Void RCC_Configuration()RCC_CR |= (116); / HSE振荡器开启 RCC_CR &= (10); / HSI振荡器关闭RCC_CFGR |= (12); / HSE作为系统时钟RCC_APB2ENR |= (17); /打开GPIOF端口时钟3、 GPIOF配置GPIOF配置成通用开漏输出模式,代码如下:void GPIO_Configuration() GPIOF_CRH = 0x11111111;/GPIO 158 GPIOF_CRL = 0x11111111;/GPIO 7 04、 GPIO置位/复位置位/复位功能通过对端口位设置/清除寄存器(GPIOx_BSRR)操作实现,代码如下:void GPIO_SetBits( u16 GPIO_Pin) GPIOF_BSRR = G

温馨提示

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

评论

0/150

提交评论