• 一、利用固件库模板点灯(附模板及案例程序)


    固件库模板

    见博客:stm32f103c8t6新建固件库模板(可自取)

    准备资料

    1. 固件库模板
    2. MDK5开发环境
      实验程序已经发布到百度网盘,本文末有链接可以自取

    实验步骤

    一、新建文件

    在这里插入图片描述

    二、打开工程

    在这里插入图片描述

    三、Hardware添加led.c文件

    在这里插入图片描述
    当前工程为如下图:
    在这里插入图片描述

    四、将led.h头文件加入到工程里

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    五、编写代码

    led.c

    stm32f103c8t6自带一个led灯,使用PC13引脚就行了,

    切记尽量避免使用PB3、PB4,具体看stm32f103c8t6使用PB3和PB4做普通GPIO使用时发现异常

    #include "led.h"	//绑定led.h
    
    void LED_GPIO_Config(void) {
        GPIO_InitTypeDef GPIO_InitStruct; //初始化参数结构体指针,结构体类型为 GPIO_InitTypeDef。
        //开启RCC时钟
        RCC_APB2PeriphClockCmd(LED_G_GPIO_CLK, ENABLE);
    
        //配置初始化,推挽输出方式和LED_G_GPIO_PIN管脚、赫兹
        GPIO_InitStruct.GPIO_Pin = LED_G_GPIO_PIN;
        GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
        //GPIO口初始化
        GPIO_Init(LED_G_GPIO_PORT, &GPIO_InitStruct);
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    led.h

    #ifndef __LED_H_
    #define __LED_H_
    
    #include "stm32f10x.h"
    #include "sys.h"
    
    #define LED_G_GPIO_PIN         GPIO_Pin_13
    #define LED_G_GPIO_PORT        GPIOC
    #define LED_G_GPIO_CLK         RCC_APB2Periph_GPIOC
    //使用位带操作来实现操作某个IO口的 1个位,由sys.h实现
    #define LED 				   PCout(13)
    
    void LED_GPIO_Config(void); //函数定义
    
    #endif
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    main.c

    #include "delay.h"
    #include "sys.h"
    #include "usart.h"
    #include "stm32f10x.h"
    #include "led.h"		//引用led文件
    
    int main()
    {
        /********************************************************************************
        *    Delay_init();				  //本实验使用的是SysTick时钟
        *    CPU_TS_TmrInit();      //已经使能宏,不需要初始化
        *    uart1_init(115200);	 	//串口初始化为115200,需要在usart.h中使能
        *    uart3_init(115200);	 	//串口初始化为115200
        ********************************************************************************/
    
        /* 初始化 */
    
        LED_GPIO_Config();		//初始化led使用的GPIO口
        while (1) {
            //LED=0;
    		//GPIOC->BSRR=GPIO_Pin_13; //设置 GPIOB.5 输出 0,等同 LED0=0;
    		GPIO_ResetBits (GPIOC, GPIO_Pin_13); //设置 GPIOB.5 输出 0,等同 LED0=0;
            Delay_ms(500);		//已经在delay.h中初始化
    			
            //LED=1;
    		GPIOC->BRR=GPIO_Pin_13; //设置 GPIOB.5 输出 1,等同 LED0=1;
    		GPIO_SetBits(GPIOC, GPIO_Pin_13); //设置 GPIOB.5 输出 1,等同 LED0=1;
            Delay_ms(500);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    六、编译

    在这里插入图片描述
    可以看到没有错误,也没有警告。从编译信息可以看出,我们的代码占用 FLASH 大小为:4736 字节(4468+268),所用的 SRAM 大小为: 2704 个字节(40+2664)。这里我们解释一下,编译结果里面的几个数据的意义:
    Code:表示程序所占用 FLASH 的大小(FLASH)。
    RO-data:即 Read Only-data, 表示程序定义的常量,如 const 类型(FLASH)。
    RW-data:即 Read Write-data, 表示已被初始化的全局变量(SRAM)
    ZI-data:即 Zero Init-data, 表示未被初始化的全局变量(SRAM)
    有了这个就可以知道你当前使用的 flash 和 sram 大小了,所以,一定要注意的是程序的大小不是.hex 文件的大小,而是编译后的 Code 和 RO-data 之和。

    七、选择烧录工具并配置MDK

    本文选择的是ST_Link烧录工具
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    成品

    在这里插入图片描述

    工程链接

    链接:https://pan.baidu.com/s/1u5t9b-ZMKimluPEt1rCGwg
    提取码:0000

  • 相关阅读:
    hadoop安装的过程中的报错​/libhadoop.so.1.0.0​
    图论与网络优化2
    京东面试——算法工程师
    MAC苹果电脑如何压缩rar文件?
    初步认识 C语言
    [附源码]java毕业设计合租吧管理系统
    Kafka是什么?
    Redis分布式锁的实现、优化与Redlock算法探讨
    C语言牛客网(NowCoder)刷题篇
    ABAP 调用HTTP上传附件(二)之中文乱码
  • 原文地址:https://blog.csdn.net/weixin_55999942/article/details/126029263