点燃第一个单片机 - STM32


点燃第一个单片机

00 - STM32 - 点燃第一个单片机

STM32F103C8T6

片上资源/外设

命名规则

系统结构

引脚定义

启动配置

最小系统电路

软件安装

安装Keil5 MDK

安装器件支持包

  • Keil.STM32F1xx_DFP.2.2.0.pack

软件注册

keygen_new2032

安装STLINK驱动

路径

  • Keil_v5ARMSTLinkUSBDriver
  • dpinst_amd64.exe

安装USB转串口驱动

路径

  • 工具软件USB转串口CH340驱动CH341SER.EXE

端口(CH340)

Hello World

STM32库函数

  • STM32F10x_StdPeriph_Lib_V3.5.0.zip

新建项目

添加一点工程的必要文件

路径(固件库)

  • STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3DeviceSupportSTSTM32F10xstartuparm

其他

添加一个内核寄存器的描述文件

启动文件 - 放在项目文件内,并新建文件夹Start

配置KEIL5

新建项目

代码Hello World

#include "stm32f10x.h"

int main(void){
    while(1){
        
    }
}

通过配置寄存器来完成点灯的操作(准备工作)

STLink连接STM32

  • 连接好后红灯常亮,蓝灯闪烁

配置调试器

如果DOWNLOAD失败,请更新STLINK驱动或检查插线是否有误

测试(红灯常亮)

配置寄存器的方式进行点灯的操作(完善代码)

完善代码

#include "stm32f10x.h"

int main(void)
{
    RCC->APB2ENR = 0x00000010;
    GPIOC->CRH = 0x00300000;
    GPIOC->ODR = 0x00000000; //0x00002000则是红灯亮
    while(1)
    {
        
    }
}

测试(红绿灯常亮)

总结:新建工程步骤

通过库函数操作

库函数的源文件

路径

  • STM32STM32F10x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10x_StdPeriph_Driversrc

库函数的头文件

路径

  • STM32STM32F10x_StdPeriph_Lib_V3.5.0LibrariesSTM32F10x_StdPeriph_Driverinc

在项目内新建Library文件夹并复制库函数的源文件和头文件

其他文件(配置库函数头文件的包含关、存放中断函数)

路径

  • STM32STM32F10x_StdPeriph_Lib_V3.5.0ProjectSTM32F10x_StdPeriph_Template

三文件复制到项目User目录下

宏定义

#ifdef USE_STDPERIPH_DRIVER
  #include "stm32f10x_conf.h"
#endif

Define:USE_STDPERIPH_DRIVER

Include Paths

用库函数来实现点灯的操作

配置GPIOC的外设时钟

    // 库函数操作
    //配置GPIOC的外设时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

配置端口模式

    /*GPIO初始化*/
    GPIO_InitTypeDef GPIO_InitStructure;                    //定义结构体变量
    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //GPIO模式,赋值为推挽输出模式
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;                //GPIO引脚,赋值为第13号引脚
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //GPIO速度,赋值为50MHz
    
    GPIO_Init(GPIOC, &GPIO_InitStructure);                    //将赋值后的构体变量传递给GPIO_Init函数
                                                            //函数内部会自动根据结构体的参数配置相应寄存器
                                                            //实现GPIOC的初始化
    
    /*设置GPIO引脚的高低电平*/
    /*若不设置GPIO引脚的电平,则在GPIO初始化为推挽输出后,指定引脚默认输出低电平*/
//    GPIO_SetBits(GPIOC, GPIO_Pin_13);                        //将PC13引脚设置为高电平
    GPIO_ResetBits(GPIOC, GPIO_Pin_13);                        //将PC13引脚设置为低电平

完整代码

#include "stm32f10x.h"

int main(void)
{
    // 寄存器操作
    //RCC->APB2ENR = 0x00000010;
    //GPIOC->CRH = 0x00300000;
    //GPIOC->ODR = 0x00000000;
    
    // 库函数操作
    
    
    /*GPIO初始化*/
    GPIO_InitTypeDef GPIO_InitStructure;                    //定义结构体变量
    
    //配置GPIOC的外设时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
    
    //使用各个外设前必须开启时钟,否则对外设的操作无效
    
    /*GPIO初始化*/

    
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //GPIO模式,赋值为推挽输出模式
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;                //GPIO引脚,赋值为第13号引脚
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //GPIO速度,赋值为50MHz
    
    GPIO_Init(GPIOC, &GPIO_InitStructure);                    //将赋值后的构体变量传递给GPIO_Init函数
                                                            //函数内部会自动根据结构体的参数配置相应寄存器
                                                            //实现GPIOC的初始化
    
    /*设置GPIO引脚的高低电平*/
    /*若不设置GPIO引脚的电平,则在GPIO初始化为推挽输出后,指定引脚默认输出低电平*/
    GPIO_SetBits(GPIOC, GPIO_Pin_13);                        //将PC13引脚设置为高电平
    //GPIO_ResetBits(GPIOC, GPIO_Pin_13);                        //将PC13引脚设置为低电平
    
    while(1)
    {
        
    }
}

测试1 - 将PC13引脚设置为高电平(红灯亮)

测试2 - 将PC13引脚设置为低电平(两灯亮)

STM32型号分类及缩写

工程架构

声明:三二一的一的二|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 点燃第一个单片机 - STM32


三二一的一的二