文章目录

  • 一、实验题目
  • 二、建立工程文件
    • 1.自己建立工程
    • 2.使用网上模板
  • 三、点亮LED灯
    • 1.代码实现
    • 2.编译
    • 3.仿真波形图
    • 4.烧录
    • 5.电路连接
    • 6.运行结果

一、实验题目

以 STM32最小系统核心板(STM32F103C8T6)+面板板+3只红绿蓝LED 搭建电路,使用GPIOB、GPIOC、GPIOD这3个端口控制LED灯,轮流闪烁,间隔时长1秒。

1)写出程序设计思路,包括GPIOx端口的各寄存器地址和详细参数;

2)分别用汇编语言,C语言编程实现。

二、建立工程文件

建立工程文件可以我们自己来一步一步按照自己的需要进行建立,也可以在网上找到合适的其他人建立好的工程模板,这样可以大大提高效率,本文就从这两方面给大家介绍。

1.自己建立工程

  • 首先新建一个light工程,工程的建立方法同之前文章的方法,这里不过多介绍。
  • 本实验要求我们用STM32C8T6芯片,所以在建立工程前选择芯片要选择相对应的。
  • 建立好的工程如图所示。
  • 接下来我们要添加启动代码,启动代码在网络上有,需要者需要自己进行下载。
  • 启动代码就是一段与硬件相关的汇编代码,ST公司对于不同容量的芯片提供了不同的三个启动文件,分别是:
    startup_stm32f10x_ld.s,startup_stm32f10x_md.s,startup_stm32f10x_hd.s
    依次对应:

小容量:FLASH≤32K
中容量:64K≤FLASH≤128K
大容量:256K≤FLASH

我们按照需求选择需要的启动文件,因为我们的芯片选择是STMC8T6,所以我们的Flash容量大小是128K对应中容量,所以我们选择startup_stm32f10x_md.s并将该文件下载保存到工程文件目录下。

  • 接下来在工程中加入启动文件如图所示:

    打开该.s文件可以看到对这个文件的描述,这个属于开发者设计的描述内容,我们只需要知道需要添加他才可以进行初始化、调用等操作就行,具体文件内容不用过多了解。

  • 接下来我们在工程文件夹右键点击Manage Project Items,可以看到此时只有一个source group组,我们添加一个组用来存放sys.c,delay.c和usart.c文件,组的名字自己确定一个好记的名字就行。

  • 同样我们可以再新建一个组用来存放我们的.c文件,当然也可以不新建,就放在已有的组source group里就可以,看个人习惯。

  • 接下来我们需要修改全局宏定义,点击魔术棒图标,在C++处修改Define。

  • 在output处勾选生成hex文件。

    这样我们的工程就建立完毕。

2.使用网上模板

合理利用互联网资源能使我们工作的效率大大提高,上面介绍了手动建立工程,但网上已经有相关的资源,省去了我们每次建立工程的麻烦,这里我个人使用的是洋桃电子,感兴趣的可以去官网去下载。

如图所示,我们只需直接将模板文件夹内建立好的工程即可,打开后左侧可以看到已经建立好相关的组和文件,当然启动文件也在内。

三、点亮LED灯

1.代码实现

  • 根据题目要求,我们首先要初始化LED灯的接口并配置时钟。选择LED_Init 三个目标端口的模式为推挽输出,默认输出1,这样就完成了初始化端口。
    led.c:
#include "led.h"void LED_Init(void){ //LED灯的接口初始化GPIO_InitTypeDef  GPIO_InitStructure;     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);   //开启时钟GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //选择端口号(0~15或all)                        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式,这里是推挽输出模式       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)    GPIO_Init(GPIOA, &GPIO_InitStructure);  GPIO_ResetBits(GPIOA,GPIO_Pin_0);//初始值是低电平RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);       GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0; //选择端口号(0~15或all)                        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)    GPIO_Init(GPIOB, &GPIO_InitStructure);GPIO_ResetBits(GPIOB,GPIO_Pin_0);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);       GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13; //选择端口号(0~15或all)                        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz)    GPIO_Init(GPIOC, &GPIO_InitStructure);GPIO_ResetBits(GPIOC,GPIO_Pin_13);}

因为题目要求使用三个端口,这里我使用的是GPIOA,GPIOB和GPIOC,管口号依次是0,0,15因为对应芯片电路好连接。

关于推挽输出模式的介绍可以查看我之前的文章,介绍了八种输出模式。
链接: https://blog.csdn.net/cleveryoga/article/details/120927837.

  • 接下来我们创建一个.h文件用于声明我们在.c文件内编写的函数名,LED_Init(void),该函数如我们在.c文件中已经提到他的作用是LED灯的接口初始化,我们在.h文件中声明该函数这样在main程序中就可以方便调用。
    led.h
#include "sys.h"void LED_Init(void);//初始化
  • 接下来是main程序 的编写,我们先理清思路,我们已经在.h文件中和.c文件中初始化时钟初始化接口,也已经设置好了相应管脚管口对应的端口号,设置好了速度。根据题目要求是我们做一个流水灯,需要三种颜色交替闪烁,交替闪烁的实现在电路中就是对应高低电平的配置,接高电平3.3V就是亮,低电平0V就是熄灭,同时三种颜色闪烁之间有间隔需要设置一个延时时间,这个根据自己的需要可长可短,思路明确我们就可以编写main程序了。
    main.c:
int main (void){//主程序RCC_Configuration(); //时钟设置LED_Init();while(1){GPIO_SetBits(GPIOA,GPIO_Pin_0);  //这个就是将IO口设置为高电平就是3.3Vdelay_s(1);GPIO_ResetBits(GPIOA,GPIO_Pin_0);//这个就是将IO口设置为低电平就是0Vdelay_s(1);  //  维持上面的状态1s,因为咱们LED灯负极接电源负极,此时单片机输出0V,LED两端没有电压差值,所以LED灯不会亮delay_s(1); //延时1秒GPIO_SetBits(GPIOB,GPIO_Pin_0);   //这个就是将IO口设置为高电平就是3.3Vdelay_s(1);GPIO_ResetBits(GPIOB,GPIO_Pin_0);//这个就是将IO口设置为低电平就是0Vdelay_s(1);  //  维持上面的状态1s,因为咱们LED灯负极接电源负极,此时单片机输出0V,LED两端没有电压差值,所以LED灯不会亮delay_s(1); //延时1秒GPIO_SetBits(GPIOC,GPIO_Pin_13);  //这个就是将IO口设置为高电平就是3.3Vdelay_s(1);GPIO_ResetBits(GPIOC,GPIO_Pin_13);//这个就是将IO口设置为低电平就是0Vdelay_s(1);  //  维持上面的状态1s,因为咱们LED灯负极接电源负极,此时单片机输出0V,LED两端没有电压差值,所以LED灯不会亮delay_s(1); //延时1秒}
}

可以看到在main程序中先是调用了led.h文件对时钟和接口初始化,接下来是一个循环,循环体中GPIO_SetBits先给GPIOA管脚的0号端口高电平3.3V亮,经过一s时间的延时GPIO_ResetBits让GPIOA管脚0端口熄灭,同样是1s延时,接下来变为GPIOB和GPIOC的相应端口号,相同的操作,一直循环该程序。

2.编译


如图所示程序编译结果没有错误,说明语法逻辑上是没有问题的,具体呈现需要连接电路查看闪烁是否正确。

3.仿真波形图

打开仿真,在上面分析窗口点击setup,添加你的想要查看的管脚号。

得到下面的仿真波形图:

4.烧录

首先我们需要在PC机上下载好FlyMCU,这个在网上找就找得到,打开界面如图所示。

  • 正确连接好USB-TTL和面包板,注意好对应关系:
    PA9——RXD
    PA10——TXD
    3.3V接电
    GND接地
  • 在FlyMcu界面勾选编程后执行,选择好读取的hex文件路径,在最下角选择RTS低电平复位,DTR高电平进BootLoader

5.电路连接

让程序通电就开始运行需要设置BOOT0为0,BOOT1都可以,根据程序连接好电路如图所示。

6.运行结果


如图所示,LED交替闪烁,间隔时间是1s。

STM32C8T6+面板板+3只LED点亮流水灯相关推荐

  1. 【嵌入式基础】用C语言编程、寄存器实现LED流水灯程序;stm32CubeMX+Keil使用HAL库点亮流水灯

    本文主要介绍STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化设置步骤.利用C语言编程和寄存器点亮流水灯以及stm32CubeMX+Keil使用HAL库点灯 目录 一.STM3 ...

  2. stm32核心板可以点亮灯吗_利用STM32F103C8T6最小系统板点亮流水灯

    后台网友建议制作一个流水灯,正好发现自己有之前购买的STM32F103C8T6核心板,今天搭建一个流水灯,正好学习一下STM32 GPIO输出如何实现,将来驱动蜂鸣器.继电器等都会使用的. 流水灯相当 ...

  3. 嵌入式下的Hello World——点亮流水灯(STM32cubemx)

    前言: 一.环境搭建 1. 下载STM32CuneMx 2.安装CubeMx 3.安装HAL库 二.CubeMx配置完成点亮流水灯 1.新建工程 2.环境配置 三.编写流水灯代码 1.打开由CubeM ...

  4. 软件安装和点亮流水灯

    软件安装和点亮流水灯 Keil和STM32CubeMX 主要是STM32CubeMX的使用 Keil和STM32CubeMX stm32mx直接安装就可以,keil安装的过程中需要配合破解软件keyg ...

  5. 51单片机点亮流水灯

    51单片机点亮流水灯 51单片机点亮流水灯 首先介绍开发板easyboard上的LED灯 P1端口通过74HC573连接到LED灯,查询74HC573芯片手册,内部由8个D锁存器构成,当OE为低电平, ...

  6. STM32单片机点亮流水灯

    STM32单片机GPIO口点亮流水灯 任何一个单片机,最简单的外设莫过于 IO 口的高低电平控制了,本文将通过一个经典的流水灯程序,了解 STM32F1 的 IO 口作为输出LED:DS0 和 DS1 ...

  7. 实验一 stm32F407VETx点亮流水灯

    实验一.stm32F407VETx点亮流水灯 一.前期准备 软件:STM32CubeMX,Keil(ARM) 硬件:stm32F407VETx开发板,stm32其他系列也可 二.设计指标 使电路板上的 ...

  8. 用51单片机点亮流水灯

    用51单片机点亮流水灯的几种方法 1. 直接按位操作一个一个点亮 #include<reg51.h>//头文件 sbit LED0=P2^0; //位定义单片机接LED灯的端口 sbit ...

  9. LED原理及流水灯的实现

    LED原理及流水灯的实现 原理 Library中 ACTIVE:可视化的,可以看清LED的活动 LED_BIBY的意思是:两种极性的LED颜色:B-blue,Y-yellow LED是蓝色的,发光后颜 ...

  10. 51单片机-LED模块-来回流水灯

    51单片机-LED模块-来回流水灯 1. 视频 哔哩哔哩视频地址: https://www.bilibili.com/video/av89552821 51单片机-LED模块-来回流水灯 2. 文件 ...

最新文章

  1. Tesseract-OCR 3.04在Windows7 vs2013上编译过程
  2. codeigniter配置smarty模板
  3. Ajax请求中的async:false/true的作用
  4. Python实现目录文件的全量和增量备份
  5. python技巧 pdf-求教使用python库提取pdf的方法?
  6. 来自微信官方:微信支付跨平台软件架构首次曝光
  7. 医院各领域榜单。22个科室、100种常见疾病
  8. 网络安全协议—SSL
  9. java jpg转换tif_JAVA 实现jpg/tif/bmp 等图片之间格式得互相转换
  10. python怎么画钟表表盘,python ——钟表,,1、表盘 1 fro
  11. 修改linu主机名后 启动tomcat服务报Unable to set localhost. This prevents creation of a GUID. Cause was: qudaogua
  12. 初学python做的一张简单的脑图
  13. OneDrive教育版注册和登录
  14. CPU使用率原理及计算方式
  15. 分类信息网和织梦搬家后报错Fatal error: Uncaught ArgumentCountError: Too few arguments to function AddFilter(), 3
  16. Web应用优化 - 优化切页模式
  17. python 12306查询不到车次_python爬取12306火车车次信息
  18. 大数据学习之Flink环境搭建+提交任务方式
  19. ellipsize实现跑马灯总结
  20. VB编写简易动态按钮控件

热门文章

  1. python中%是什么意思_在python中%是什么意思
  2. Kafka生产者和消费者
  3. 32位系统为什么又叫x86系统呢?
  4. aardio java_图形界面Aardio
  5. SimpleMind 1.27.1 小巧的思维导图工具
  6. 如何高效优雅地下载CMIP6模式数据
  7. bugku-秋名山老司机
  8. 商学院学习笔记(2)
  9. 年利率、七日年化收益率、万份收益
  10. 李沐的动手学深度学习环境配置