STM32开发手记第一篇

STM32开发手记

201512日,周五,下午1057

由于最近公司开发需要用到STM32,所以今天准备自学STM32,因为之前搞过51ARM,对于STM32还没有一点了解,虽然听别人说了很简单,但是毕竟没有接触过,只是了解到了开发有寄存器的方式和固件库的方式,由于本人对寄存器的方式情有独钟,所以毅然选择寄存器的方式学习,在网上搜了很多资料,准备自己把自己的开发笔记记录下来,从零开始!!!

千篇一律,学习单片机最先的、最伟大的工程,跑马灯。就像hello word一样。

1.芯片STM32F103C864pin,一共两组,每一组16IO

2.电路的原理:PB0连接LEDLED低电平点亮。使LED闪烁。

 

使用杜邦线将PB0与一路的LED相连接,将PB0拉低点亮LED,拉高熄灭LED

所以程序流程图如下:

 

 

 

3.IO初始化,参考资料:STM32中文参考手册_V10

STM32IO设置相对于51来说麻烦了一些:

1>设置IO是输入还是输出模式,输入模式下面又分模拟输入、浮空输入等等,输出模式分通用的推挽输出,复用的开漏输出等等,详细配置如下图:

 

我们需要点亮LED,所以IO自然设置为输出模式,图中每四位决定一个IO的模式,例如我们需要用PB0来控制LED的亮灭,我们需要设置PB0为通用的推挽输出模式,即GPIOB->CRLbit[3:0]0011,所以对应的设置如下:

GPIOB->CRL = 0X00000003;

2>设置完输出模式还需要设置输出的电平的高低。高电平熄灭,低电平点亮,所以对应的寄存器如下图:

 

所以:

GPIOB->ODR = 0X00000001;//使PB0输出高电平

3>目前需要的IO配置已经完成?未必,缺少一个重要的配置:RCC->APB2ENR(外设时钟使能寄存器)

外部时钟的控制在运行模式下,任何时候都可以通过停止为外设和内存提供时钟(HCLKPCLKx)来减少功耗。


为了在睡眠模式下更多地减少功耗,可在执行WFI或WFE指令前关闭所有外设的时钟。
通 过 设 置 AHB 外 设 时 钟 使 能 寄 存 器 (RCC_AHBENR) 、 APB2 外 设 时 钟 使 能 寄 存 器(RCC_APB2ENR)和APB1 外设时钟使能寄存器(RCC_APB1ENR)来开关各个外设模块的时钟。

总之一句话:用到什么接口就使能对应接口的时钟,用不到就不要去操作对应的时钟以减少功耗。

RCC->APB2ENR配置如下:

RCC->APB2ENR = 1<<3;

寄存器如下图:

 

源代码:

#include <stm32f10x.h>

 

void IO_init()

{

/* 使能IO口的时钟 */

RCC->APB2ENR = 1<<3;

/* IO口的配置 */

GPIOB->CRL = 0X00000003;//设置为通用的推挽输出

}

 

void delay_us(int timer)

{

int i = 0;

while(timer--)

{

i = 10;

while(i--);

}

}

 

void delay_ms(unsigned int timer)

{

unsigned int i = 0;

while(timer--)

{

i = 12000;

while(i--);

}

}

 

int main()

{

IO_init();

while(1)

{

GPIOB->ODR = 0X00000001;//拉高PB0熄灭

delay_ms(50);

GPIOB->ODR = 0X00000000;//拉低PB0点亮

delay_ms(50);

}

}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值