【菜鸟入门】stm32的第一个程序--LED
来源:互联网 发布:温州软件外派 编辑:程序博客网 时间:2024/04/27 14:54
经过今天一天的努力终于完成了我的stm32第一个程序;我也是今天才开始接触stm32。
由于苦于没有资料,木有例程,找到的例程都是带有库的,这样对stm32基础的管脚配置就不容易懂了,主要是没有一个具体的轮廓。
经过对库文件的研究,和看了好几节视频,又根据自己以前搞430和arm9的经验,就按着以前的思路进行研究,终于开发出自己的第一个LED程序;
1、创建工程
(1)Project --> New uvision Project
(2)选择工程要保存的地方
(3)选择CPU
(4)选择“是”(如果你使用从STM下载的库的话,就选“否”)
(5)修改一下代码(如果不注视掉红色部分,会出现错误)
; Reset handlerReset_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/2PLL -= 2;//9-2 = 0111bRCC->CFGR |= PLL << 18;//0111 ==> X9RCC->CFGR |= 1 << 16;//PREDIV1 ouput as source of PLLFLASH->ACR |= 0x32;//WithRCC->CR |= 1<<24;//enable PLL [24bit]while(!(RCC->CR >> 25));RCC->CFGR |= 0x2<<0;//PLL As System Clockwhile(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 9RCC->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学习之第一个程序(点亮LED)
- 第一个STM32程序
- STM32初探-点亮第一个led灯
- 菜鸟成功修改的第一个程序
- 一位菜鸟编写的第一个程序
- 【奔跑的菜鸟】第一个Java程序
- 第一个blackberry程序LED Player完成
- stm32点亮第一个led灯(初学)
- STM32第一个小项目(点亮LED)
- 我的stm32第一个程序按键防抖
- ExtJS的入门第一个程序
- Hibernate 入门的第一个程序
- TI 6678第五天 LED程序(借助6416的程序来理解第一个程序)
- stm32--第一个串口通信程序
- JAVA菜鸟入门篇-第一个java程序、变量和数据类型(三)
- 我的嵌入式学习之路(一) linux 跑的第一个程序 LED灯
- java第一个入门程序
- 20非常有用的Java程序片段
- C++中的4种类型转换方式
- Spring 3.0 注解注入详解
- 黄淮学院CSDN高校俱乐部第一次c语言培训
- 关于RDF的技术支持和应用部分示例
- 【菜鸟入门】stm32的第一个程序--LED
- codeforces Round 211 Div 2部分题解(持续更新中.......)
- 关于:(.text+0x21): undefined reference to `shm_open'问题
- 下图片地图有关
- 黑马程序员-为什么要设置JAVA_HOME、Path、CLASSPATH、CATALINA_HOME
- Opencv问题:Bad argument can not get new positive sample
- MyEclipse 启动报错:'Building workspace' has encountered a problem解决方法
- <操作系统>进程与线程的有趣理解
- <操作系统>进程与线程的有趣理解