码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 一、利用固件库模板点灯(附模板及案例程序)


    目录

    • 固件库模板
    • 准备资料
    • 实验步骤
      • 一、新建文件
      • 二、打开工程
      • 三、Hardware添加led.c文件
      • 四、将led.h头文件加入到工程里
      • 五、编写代码
        • led.c
        • led.h
        • main.c
      • 六、编译
      • 七、选择烧录工具并配置MDK
    • 成品
    • 工程链接

    固件库模板

    见博客: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

  • 相关阅读:
    Solana流支付协议Zebec完成850万美元融资,CircleVentures等参投
    Uniapp中使用uQRCode二维码跳转小程序页面
    一个小台灯 之 微信小程序开发日志
    数据库数据恢复-oracle数据库报错:数据库无法打开的数据恢复案例
    如何提升量化投研效率?来自辰钰投资的案例分享
    Python py文件打包成 exe文件
    Spring Cloud面试题
    Linux常用命令:find、grep、vim、cat、less、more
    【数据结构】链表(及其单链表实现)
    Java Spring Boot 写 API 接口
  • 原文地址:https://blog.csdn.net/weixin_55999942/article/details/126029263
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号