【菜鸟入门】stm32的第一个程序--LED
2013-11-11 22:08
417 查看
经过今天一天的努力终于完成了我的stm32第一个程序;我也是今天才开始接触stm32。
由于苦于没有资料,木有例程,找到的例程都是带有库的,这样对stm32基础的管脚配置就不容易懂了,主要是没有一个具体的轮廓。
经过对库文件的研究,和看了好几节视频,又根据自己以前搞430和arm9的经验,就按着以前的思路进行研究,终于开发出自己的第一个LED程序;
1、创建工程
(1)Project --> New uvision Project
(2)选择工程要保存的地方
(3)选择CPU
(4)选择“是”(如果你使用从STM下载的库的话,就选“否”)
(5)修改一下代码(如果不注视掉红色部分,会出现错误)
(6)加入定义
Flash --> Flash config tools --> C/C++ -->
在Defines里面添加:STM32F10X_HD
不然也会提示错误!
(7)Jlink下载设置(如果你用的是Jlink可以设置下)
在(6)的Flash config tools中的Debug中选中use [J-LINK / J-Trace Cortex ] -->Setting --> Flash Download 按照如下设置
这样算是大致设置好了。
2、编写时钟初始化程序
具体数值为什么这么配置,请看寄存器
3、延时函数
为了实现准确延时,我们选用SysTick
这里的timeout不能超过一个值,具体多大可以自己计算下;
LOAD为24位 0xffffff/9000 = timeout_max;【注:感谢@大黄同学的帮我指出错误!!可以看下下面的寄存器】
STK_LOAD可用位数为[23:0];【再次感谢大黄!!!】
4、LED灯的控制
我的板子LED灯与stm32的pin是这样对应的
LED1 --> PE1
LED2 --> PE0
LED3 --> PE2
LED4 --> PE3
我这里准备对LED2/PE0进行操作
由于苦于没有资料,木有例程,找到的例程都是带有库的,这样对stm32基础的管脚配置就不容易懂了,主要是没有一个具体的轮廓。
经过对库文件的研究,和看了好几节视频,又根据自己以前搞430和arm9的经验,就按着以前的思路进行研究,终于开发出自己的第一个LED程序;
1、创建工程
(1)Project --> New uvision Project
(2)选择工程要保存的地方
(3)选择CPU
(4)选择“是”(如果你使用从STM下载的库的话,就选“否”)
(5)修改一下代码(如果不注视掉红色部分,会出现错误)
; Reset handler Reset_Handler PROC EXPORT Reset_Handler [WEAK] IMPORT __main ;IMPORT SystemInit ;LDR R0, =SystemInit ;BLX R0 LDR R0, =__main BX R0 ENDP
(6)加入定义
Flash --> Flash config tools --> C/C++ -->
在Defines里面添加:STM32F10X_HD
不然也会提示错误!
(7)Jlink下载设置(如果你用的是Jlink可以设置下)
在(6)的Flash config tools中的Debug中选中use [J-LINK / J-Trace Cortex ] -->Setting --> Flash Download 按照如下设置
这样算是大致设置好了。
2、编写时钟初始化程序
int sys_init(unsigned char PLL) { unsigned char temp = 0; RCC->CR |= 1<<16; //OPEN HSE while(!(RCC->CR>>17)); RCC->CFGR = 0x04<<8; //APB1 HSE/2 PLL -= 2; //9-2 = 0111b RCC->CFGR |= PLL << 18; //0111 ==> X9 RCC->CFGR |= 1 << 16; //PREDIV1 ouput as source of PLL FLASH->ACR |= 0x32; //With RCC->CR |= 1<<24; //enable PLL [24bit] while(!(RCC->CR >> 25)); RCC->CFGR |= 0x2<<0;//PLL As System Clock while(temp != 0x02) { temp = RCC->CFGR >> 2; temp &= 0x03; } return 0; }
具体数值为什么这么配置,请看寄存器
3、延时函数
为了实现准确延时,我们选用SysTick
void delay_ms(int timeout) { u32 temp = 0; SysTick->CTRL = 0xfffffffb; SysTick->LOAD = timeout*9000; SysTick->VAL = 0x00; SysTick->CTRL = 0x01; do{ temp = SysTick->CTRL; }while((temp&0x01)&&!(temp&(1<<16))); SysTick->CTRL = 0x00; SysTick->VAL = 0x00; }
这里的timeout不能超过一个值,具体多大可以自己计算下;
LOAD为24位 0xffffff/9000 = timeout_max;【注:感谢@大黄同学的帮我指出错误!!可以看下下面的寄存器】
STK_LOAD可用位数为[23:0];【再次感谢大黄!!!】
4、LED灯的控制
我的板子LED灯与stm32的pin是这样对应的
LED1 --> PE1
LED2 --> PE0
LED3 --> PE2
LED4 --> PE3
我这里准备对LED2/PE0进行操作
int main() { sys_init(9); //系统时钟初始化72M = 8M X 9 RCC->APB2ENR |= 1<<6; //使能GPIOE的时钟 GPIOE->CRL &= 0xFFFFFFF0;//清除PE0的控制位 GPIOE->CRL |= 0x00000003; //选用输出模式 --->50MHz GPIOE->ODR |= 1<<0;//设置PE0位输出模式 //GPIOE->BRR = 1<<0;//设置PE0输出的电平 while(1){ delay_ms(1000); GPIOE->BRR = 1<<0;// delay_ms(1000); GPIOE->BSRR = 1<<0;// } }
相关文章推荐
- STM32学习第一个程序,LED灯
- STM32移植contiki入门之三:从LED灯程序到contiki编程模型
- STM32学习之第一个程序(点亮LED)
- JAVA菜鸟入门篇-第一个java程序、变量和数据类型(三)
- 【菜鸟入门】安装配置eclipse 并编写运行第一个Java程序
- JavaSE第一讲:JavaSE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行
- JavaSE第一讲:JavaSE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行
- 黑莓开发新手入门教学帖,如何制作一个能控制LED颜色的程序(五)
- Micro Python 入门教程---第一个Micro Python 程序
- TI 6678第五天 LED程序(借助6416的程序来理解第一个程序)
- Windows Azure入门教学系列 (二):部署第一个Web Role程序
- python入门(4)第一个python程序
- Java入门-第一节(JDK的安装、环境变量的配置和第一个java程序)
- 微信小程序入门 第一个页面搭建
- iBatis开发环境搭建和第一个程序(仅仅是入门)-第一节
- 第一节:Java SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行
- [SharePoint2010开发入门经典]创建你的第一个SPS2010程序
- VC菜菜鸟:建立第一个基于Visual C++的Windows窗口程序
- duilib入门简明教程 -- 第一个程序 Hello World(3) (转)
- 第一个程序01 - 零基础入门学习汇编语言20