创建单片机的项目文件--库函数版本

前言

记录一下自己最开始学习库函数时的一些知识与心得.

一、系统结构与原理

系统结构:熟悉系统结构能帮助快速理解其内部工作流程
![在这里插入图片描述](https://img-blog.csdnimg.cn/14a5290715ce49b1a15385bcf12144e1.png

如图所示,STM32的经典系统结构:
四个驱动单元:内核DCode总线(D-BUS)、系统总线(S-BUS)、DMA1、DMA2
四个被动单元:内部SRAM、内部闪存存储器、FSMC、AHB到APB的桥(AHB2APBx)
内核与外设两大部分,内核为ARM公司研发提供的,外设包括DMA、总线、Flash、SRAM、复位和时钟(RCC)、AHB总线、IO接口等为二级开发商提供。
1、DMA:(Direct Memeory Access),是一种在硬件上实现的数据传输技术,它不需要CPU的干预,可以提高数据传输的效率。在STM32中,DMA可以用于多种外设,如ADC、USART、SPI等。
优点–直接对寄存器进行配置,对CPU减负。
2、APB:(Advanced Peripheral Bus)是一种高级外设总线,用于连接低速度外设,如GPIO、ADC、DAC等。APB总线具有以下特点:

  1. 单向数据传输:APB总线为单向数据传输,每个时钟周期只能传输一个数据位。
  2. 同步时钟:APB总线的时钟由一个统一的时钟源提供,所有外设都同步于这个时钟源。
  3. 片选信号:APB总线通过一个片选信号(CS)来选择要访问的外设。
  4. 数据/地址复用:APB总线的数据线和地址线复用,因此APB总线的地址空间和数据空间是重叠的。
  5. 低功耗:APB总线具有低功耗特性,适用于对功耗要求较高的应用。
    STM32的APB外设包括GPIO、ADC、DAC等。在使用APB外设时,需要先配置APB总线,然后配置外设。(APB总线的时钟频率通常低于AHB总线,因此APB外设的性能可能不如AHB外设。在实际应用中,需要根据具体需求选择合适的总线类型)
    3、复位与时钟控制:(Restart and Clock Control),RCC是一个寄存器,用于控制系统时钟和复位微控制器。它包含了APB、AHB(高级主机总线)和其他外设时钟控制寄存器。通过配置RCC寄存器,可以控制系统时钟、外设时钟等。多数微控制器中,RCC是一个复杂的寄存器,有许多位和字段用于控制不同的时钟源和外设时钟。例如,在STM32微控制器中,RCC负责配置APB(高级外设总线)和AHB(高级主机总线)等外设时钟。
    要使用RCC,首先需要配置时钟源,然后启用所需外设的时钟。配置RCC后,可以使用复位控制寄存器执行软件复位或硬件复位(在RCC寄存器中设置复位位).
    总之,RCC是微控制器中 crucial 的组件,用于管理系统时钟和复位。它用于设置时钟树,并启用各种外设的时钟,还提供了一种执行软件复位和硬件复位的方法。
    4、Flash:可以看作为存储器。

二、创建工程文件

1.搭建项目文件架构

(1)新建工程
新建工程文件夹,Keil中新建工程,选择型号;新建工程文件夹并命名;打开Keil软件;点击新建项目并命名;选择相应的单片机型号;
(2)在工程文件中建立Start、Library、User等文件夹
复制固件库中的相关文件到工程文件夹:
将固件库中的启动文件、内核文件、和相关库复制到Start文件夹中;
Library通常用来放库函数。(若是寄存器版本就不用这一步,可直接编写代码)
User中新建main文件。
(3)新建分组
工程里对应建立Start、Library、User等同名称的分组,然后将文件内的文件添加到工程分组里;
工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹;
工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER;
工程选项,Debug,下拉列表选择对应调试器,Settings,Flash,Download里勾选Reset and Run。

在这里插入图片描述

2.编写代码

为了养成良好的代码编写风格,可以先学习在设置调整格式,同时可以美化程序界面。
养成模块化的编程风格,模块化编程有益于将主函数与硬件驱动区别开,有益于项目开发。
主函数的编写:
引用相关头文件;

#include "stm32f10x.h"                  // Device header

配置时钟函数;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

在编写嵌入式代码时,首先要对时钟进行初始化,并对其使能。在寄存器版本中,想要做到这一步,可能要在参考文档中找到GPIOC,并根据其定义对寄存器进行赋值,使其按照要求工作,在库函数版本中只需调用对应的库函数即可。
如调用“RCC_APB2PeriphClockCmd”函数,右键找到该函数的函数定义,根据其相关注释就可以了解到它的作用与使用方法,并按照注释来配置函数。

GPIO初始化
每一个GPIO接口都包含了工作模式、引脚、时钟频率三个状态,为了方便管理需要使用结构体来打包数据。
然后在初始化时直接调用结构体函数即可。

    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOC,&GPIO_InitStructure);

功能调用与实现;

    GPIO_SetBits(GPIOC,GPIO_Pin_13);
    GPIO_ResetBits(GPIOC,GPIO_Pin_13);
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值