STM32F10X入门——流水灯

STM32F103学习笔记

2019/3/16 -> 2019/3/19

主要的库函数位置

  1. /core_cm32.c/stdin.h 中定义了字符型
  2. stm32f10x.h>stm32f10x_conf.h 中定义了引用的外设头文件
  3. 库文件之间的依赖调用关系 @./~.PNG
  4. stm32f10x.h查看地址映射
        比如 define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)

GPIO使用步骤

  1. 配置寄存器:选定 GPIO 的特定功能 ,最基本的如:选择作为输入还是输出端口。
  2. 数据寄存器:保存了 GPIO 的输入电平或将要输出的电平
  3. 位控制寄存器:设置某引脚数据为 1 或 0 ,控制输出电平
  • 锁定寄存器:设置某锁定引脚后,就不能修改其配置
  • 一般使用推挽输出模式
  1. GPIO_TyPe_Def结构体中定义了GPIO_BASED的偏移量

RCC等时钟相关

  1. SYSCLK为系统时钟
    2.

LED标准示例

LED 的 GPIO 初始化函数

void LED_GPIO_Config(void){
    /*定义一个 GPIO_InitTypeDef 类型的结构体*/
GPIO_InitTypeDef GPIO_InitStructure;
    /*开启 GPIOC 的外设时钟,emable即使能*/ 
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE);
    /*选择要控制的 GPIOC 引脚 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 ;
    /*设置引脚模式为通用推挽输出*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    /*设置引脚速率为 70MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_70MHz;
    /*调用库函数,初始化 GPIOC*/
GPIO_Init(GPIOC, &GPIO_InitStructure);
    /* 初始关闭所有 led 灯,Reset 为低电平*/
GPIO_SetBits(GPIOC, GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5);}

.h文件编写规范

以 led.h 文件为例

  1. 条件编译,防止头文件重复,最好加上
#ifndef __LED_H 
#define __LED_H 

#endif 
  1. 引用头文件 #include "stm32f10x.h"
  2. 定义宏
#define ON  0
#define OFF 1
  1. 定义带参宏以及声明对应 led.c 中的函数
#define LED1(a) if (a)  \
   GPIO_SetBits(GPIOC,GPIO_Pin_3);\
else        \
   GPIO_ResetBits(GPIOC,GPIO_Pin_3) 
void LED_GPIO_Config(void);

main文件编写

  1. 头文件引用
#include "stm32f10x.h"
#include "led.h"
  1. 声明后续函数
void Delay(__IO u32 nCount);
  1. main函数编写
int main(void)
{    
    /* LED 端口初始化 */
    LED_GPIO_Config();

    while (1)
    {
        LED1( ON );              // 亮
        Delay(0x0FFFEF);
        LED1( OFF );          // 灭
        
        LED2( ON );
        Delay(0x0FFFEF);
        LED2( OFF );          
    
    }
}
  1. delay函数编写
void Delay(__IO u32 nCount)     //简单的延时函数
{
    for(; nCount != 0; nCount--);
}

你可能感兴趣的:(嵌入式)