STM32学习记录第一周

本周学习了利用寄存器操作点亮LED灯,学习教程和素材均来自海创电子工作室。以下分成几点叙述学习内容:

一、启动文件添加

本次学习用到的是STM32f103c8t6单片机。

打开keil5,新建project,选择型号为f103c8

选择好保存路径后,双击Source Group根据FLASH选择合适的启动文件,如下图所示,我选用的是startup_stm32f10x_hd.s

二、相关寄存器配置

根据原理图可以看出,想要点亮LED,则需要PC13为低电平。stm32的引脚复杂,不仅要配置低电平还要配置是输入还是输出,如果是输出的话还要配置输出速度。

 

在官方提供的STM32F10x系列编程手册中我们可以得到寄存器的基地址、偏移地址和复位值,我们可以看到GPIOC中的第0位需要CNF0和MODE0这4各位来控制,GPIOC中的第1位需要CNF1和MODE1这4各位来控制。我们常用的七个寄存器在内存中依次排列,每个寄存器占四个字节,也就是说每四位确定一个引脚功能。

 

 根据上表可写出以下代码实现通用推挽输出模式:

GPIOC_CRH &= ~(0x0F<<(4*5));
GPIOC_CRH |= (1<<(4*5));

 再根据手册可知ORD配置输出,IRD配置输入,我们现在看输出:

GPIOC_ODR &= ~(1<<13);//配置输出低电平
GPIOC_ODR |= (1<<13);//配置输出高电平

还需要根据手册内容打开GPIOC时钟:

RCC_APB2ENR |=(1<<4);//打开GPIOC时钟

那么我们就可以得出点亮LED的代码:

int main(void)
{
	*(unsigned int*)0x4002 1018 |=(1<<4);//打开时钟
	*(unsigned int*)0x40011004 &= ~(0x0F<<(4*5));//配置输出模式
    *(unsigned int*)0x40011004 |= (1<<20);
    *(unsigned int*)0x4001 100C&=~(1<<13)//配置输出低电平
}

三、思路总结

根据对寄存器操作的了解我们可以得出点亮LED灯编写代码的基本思路:

1.打开PC13对应的时钟;

2.配置输出,确定输出的模式;

3.输出低电平。

四、增加可读性

上一步的代码虽然简单、有利于单片机的编译,但对于编写代码的人来说缺少可读性,并且编写也非常困难,那么我们就需要创建一个头文件来对这些代码进行定义,方便对它们的使用。

先在文件中新建一个文件"stm32f10x.h":

 

那么在运行代码中我们只需要利用这些变量的名字就可以了,不需要将每一位数字都打出来。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值