欢迎来到天天文库
浏览记录
ID:9097515
大小:36.50 KB
页数:2页
时间:2018-04-17
《红牛开发板非固件库控制led》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、STM32红牛开发板非固件库控制LED―――10/05/23摘要STM32红牛开发板上的5个LED,接在GPIOF6~10脚,输出低电平时,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为(APB2PERIPH_BASE+0x1C00)。结合芯片手册,GPI
3、OF各寄存器地址如下:/***********GPIOF外设寄存器地址映射********************/#defineGPIOF_CRL(*(volatileunsignedlong*)(GPIOF_BASE+0x00))#defineGPIOF_CRH(*(volatileunsignedlong*)(GPIOF_BASE+0x04))#defineGPIOF_IDR(*(volatileunsignedlong*)(GPIOF_BASE+0x08))#defineGPIOF_ODR(*(volatileunsignedlong*)(GPIOF_BASE+0
4、x0C))#defineGPIOF_BSRR(*(volatileunsignedlong*)(GPIOF_BASE+0x10))#defineGPIOF_BRR(*(volatileunsignedlong*)(GPIOF_BASE+0x14))#defineGPIOF_LCKR(*(volatileunsignedlong*)(GPIOF_BASE+0x18))时钟控制寄存器基址RCC_BASE为(AHBPERIPH_BASE+0x1000),由同样方法可以得出RCC各寄存器地址如下:/****************RCC寄存器地址映射***************
5、****/#defineRCC_CR(*(volatileunsignedlong*)(RCC_BASE+0x00))#defineRCC_CFGR(*(volatileunsignedlong*)(RCC_BASE+0x04))#defineRCC_CIR(*(volatileunsignedlong*)(RCC_BASE+0x08))#defineRCC_APB2RSTR(*(volatileunsignedlong*)(RCC_BASE+0x0C))#defineRCC_APB1RSTR(*(volatileunsignedlong*)(RCC_BASE+0x10)
6、)#defineRCC_AHBENR(*(volatileunsignedlong*)(RCC_BASE+0x14))#defineRCC_APB2ENR(*(volatileunsignedlong*)(RCC_BASE+0x18))#defineRCC_APB1ENR(*(volatileunsignedlong*)(RCC_BASE+0x1C))#defineRCC_BDCR(*(volatileunsignedlong*)(RCC_BASE+0x20))#defineRCC_CSR(*(volatileunsignedlong*)(RCC_BASE+0x24))至
7、此,得到上面数据,对这些寄存器操作,我们就可以控制红牛开板的上的5个LED了。一、程序编写1、启动代码启动代码直接使用ST提供的默认启动代码,由于我的开发板是大容量FLASH的STM32F103ZET6,所以用的启动代码是startup_stm32f10x_hd.s。2、时钟配置RCC_Configuration跳转到MAIN函数后,程序第一件要做的事情就是配置系统时钟。由HSE直接作为系统时钟。VoidRCC_Configuration(){RCC_CR
8、=(1<<16);//HSE振荡器开启RCC_CR&=~(1<<0);
此文档下载收益归作者所有