红牛开发板非固件库控制LED

上传人:平*** 文档编号:16330061 上传时间:2017-11-07 格式:DOC 页数:2 大小:37.57KB
返回 下载 相关 举报
红牛开发板非固件库控制LED_第1页
第1页 / 共2页
红牛开发板非固件库控制LED_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《红牛开发板非固件库控制LED》由会员分享,可在线阅读,更多相关《红牛开发板非固件库控制LED(2页珍藏版)》请在金锄头文库上搜索。

1、STM32 红牛开发板非固件库控制 LED10/05/23摘要STM32 红牛开发板上的 5 个 LED,接在 GPIOF610 脚,输出低电平时,LED 亮。这样我们设置 GPIOF 的相关寄存器,让其输出低电平就可以让 LED 亮。因为没有用到 ST 提供的固件库,所以是直接对寄存器的内存地址读写,即对一个指向该地址的指针变量进行读写。并且该变量必须为易变型的,即用 volatile 定义,这样是为了告诉编译器不要去优化这个变量,导致其它一些寄存器的数据变化。GPIOx 是挂载在 APB2 高速外设总线上的,最大频率是 72MHZ,所以我们除了了打开 HSE(外部高速时钟)并关闭内部高速时

2、钟(开机默认选择了 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 为(APB2PE

3、RIPH_BASE + 0x1C00)。结合芯片手册,GPIOF 各寄存器地址如下:/*GPIOF 外设寄存器地址映射*/#define GPIOF_CRL (*(volatile unsigned long *) (GPIOF_BASE + 0x00)#define GPIOF_CRH (*(volatile unsigned long *) (GPIOF_BASE + 0x04)#define GPIOF_IDR (*(volatile unsigned long *) (GPIOF_BASE + 0x08)#define GPIOF_ODR (*(volatile unsigned lo

4、ng *) (GPIOF_BASE + 0x0C)#define GPIOF_BSRR (*(volatile unsigned long *) (GPIOF_BASE + 0x10)#define GPIOF_BRR (*(volatile unsigned long *) (GPIOF_BASE + 0x14)#define GPIOF_LCKR (*(volatile unsigned long *) (GPIOF_BASE + 0x18)时钟控制寄存器基址 RCC_BASE 为(AHBPERIPH_BASE + 0x1000),由同样方法可以得出 RCC 各寄存器地址如下:/*RCC

5、寄存器地址映射*/#define RCC_CR (*(volatile unsigned long *) (RCC_BASE + 0x00)#define RCC_CFGR (*(volatile unsigned long *) (RCC_BASE + 0x04)#define RCC_CIR (*(volatile unsigned long *) (RCC_BASE + 0x08)#define RCC_APB2RSTR (*(volatile unsigned long *) (RCC_BASE + 0x0C)#define RCC_APB1RSTR (*(volatile unsig

6、ned long *) (RCC_BASE + 0x10)#define RCC_AHBENR (*(volatile unsigned long *) (RCC_BASE + 0x14)#define RCC_APB2ENR (*(volatile unsigned long *) (RCC_BASE + 0x18)#define RCC_APB1ENR (*(volatile unsigned long *) (RCC_BASE + 0x1C)#define RCC_BDCR (*(volatile unsigned long *) (RCC_BASE + 0x20)#define RCC

7、_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

8、 |= (116); / HSE 振荡器开启RCC_CR &= (10); / HSI 振荡器关闭RCC_CFGR |= (12); / HSE 作为系统时钟RCC_APB2ENR |= (17); /打开 GPIOF 端口时钟3、 GPIOF 配置GPIOF 配置成通用开漏输出模式,代码如下:void GPIO_Configuration() GPIOF_CRH = 0x11111111; /GPIO 158GPIOF_CRL = 0x11111111; /GPIO 7 04、 GPIO 置位/复位置位/复位功能通过对端口位设置 /清除寄存器(GPIOx_BSRR) 操作实现,代码如下:void GPIO_SetBits( u16 GPIO_Pin)GPIOF_BSRR = GPIO_Pin;void GPIO_ResetBits(u16 GPIO_Pin)GPIOF_BSRR = GPIO_Pin16;三、 总结此程序只是用来演示脱离 ST 提供的固件库控制 GPIO 口输出。通过此程序来入门非固件库的 STM32 程序设计。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号