KST-STM32学习之初探

1、单片机用户来讲,单片机提供给的三大资源分别是程序存储空间、数据存储空间、特殊功能寄存器

2、STM32F103ZE 这款单片机,有 512K 字节的 FLASH(程序存储空间),64K 字节的静态 SRAM(数据存储空间),另外还有大量的特殊功能寄存器提供给用户来实现其功能。

3、STM32F103ZE 一共有 144 个引脚, 3.3V供电,注意与51的5V供电区分!

4、同51单片机类似,STM32仍需要单片机工作的最小系统,即:电源、晶振、复位。

  • 电源电路
    • STM32多电源供电,一个VDD引脚附近必然有一个VSS。同时需要注意,成对的VDD和VSS之间必须加上去耦电容,以保证实现EMC。
    • STM32多电源供电的好处如下:
      • 内部的功能模块多,芯片内部走线很细,单电源不足以提供足够的电流,需要多个电源并联供电,给他提供足够的电流支撑单片机的正常工作。
      • 模块在单片机内部分布分散,模块独立供电更有利于保持电源的稳定性,保证模块的正常工作。
  • 晶振电路

    • 虽然只有8M晶振,但是可通过PLL倍频,最高可达到72M。
  • 复位电路

    • 低电平复位

5、学习STM32又得特别注意一个新的东西 - 启动文件

该文件负责执行微控制器从“复位”到“开始执行 main 函数”中间这段时间(称为启动过程)所必须进行的工作。

6、寄存的操作

由于 51 单片机内部结构的特殊性,RAM 地址寄存器地址重复的区间,所以映射寄存器用的是sfr这个关键字,不能对寄存器地址直接操作。比如sfr P0=0x80; P0=0x01;表达的意思是将 0x01 赋值给 0x80 这个地址对应的寄存器。

7、GPIO

扫描二维码关注公众号,回复: 2477268 查看本文章

STM32F103ZE 的 IO 口多达 112 个,为了方便管理,分为A~G七组,每个组又有**16个**IO口!

8、GPIO的配置

STM32F103 的 IO 口输出操作流程,一共三个步骤:
配置端口时钟 -> 配置端口模式 -> 配置输出数据

配置端口时钟,需要先找到GPIO对应的总线,GPIO 外设是挂在 APB2 总线上的,查找APB2对应的基地址,然后再找到GPIOX对应的偏移地址即可实现开启时钟。

配置端口模式之前,需要先知道STM32的IO模式,一共有8种。分别是浮空输入、上拉输入、下拉输入、模拟输入、开漏输出、推挽输出、推挽式复用功能、开漏复用功能

输出模式的配置: CNF1CNF0 两位用来表示模式,MODE1MODE0 用来表示输出速率。
这里写图片描述

注意了,模式寄存器有高低之分,高寄存器控制同一端口下的8~15这8个IO,而低寄存器控制同一端口下的0~7这8个IO

还有需要注意的是,模式寄存器的复位值是 0x44444444

配置数据输出模式

输出数据寄存器的 16~31 位被保留了,也就是没有使用。因此余下的0~15 位这 16 个数据位分别对应 GPIO 端口的 16 个 IO 口。对数据位置‘1’为输出高电平,清‘0’为输出低电平。


较51需要注意的细节:

1、main函数不再是void,而是int

2、unsingned intkeil C51中是2个字节,而再keil MDK中是4个字节


附上寄存器操作,实现LED闪烁的程序。。。

int main(void)
{
    int i;
    *(unsigned int *)0x40021018 |= (1<<8); //配置 APB2 外设时钟使能寄存器,使能 GPIOG 时钟
    *(unsigned int *)0x40012000 |= (1<<28); //配置 PG7 为通用推挽输出,速率 10MHz
    *(unsigned int *)0x4001200C |= (1<<7); //配置 PG7 输出高电平,初始时为熄灭

    while(1)
    {
        *(unsigned int *)0x4001200C &= ~(1<<7); //配置 PG7 输出低电平,点亮 LED
        for (i=0; i<500000; i++); //延时一段时间
        *(unsigned int *)0x4001200C |= (1<<7); //配置 PG7 输出高电平,熄灭 LED
        for (i=0; i<500000; i++); //延时一段时间
    }
}

猜你喜欢

转载自blog.csdn.net/recclay/article/details/81220728