文章目录

  • 一、点灯
    • 1.打开时钟
    • 2. 初始化
    • 3. 设置低电平
  • 三、创建项目
    • 1. 新建项目
    • 2. 编写代码
  • 四、连接电路
  • 五、总结

使用工具:
stm32f103C8T6
USB转串口
面包板
导线若干
LED3个

一、点灯

点亮LED灯,需要用到GPIO端口。

为了点亮LED灯,需要三个步骤:

打开GPIO口的时钟
初始化GPIO口(选择推挽输出)
设置低电平

1.打开时钟

GPIO的地址:

时钟的地址:



即0x40021018,则打开三个IO口的时钟需要将三个位都置1:

#define RCC_APB2ENR (*(unsigned int *)0x40021018)// 打开时钟
RCC_APB2ENR |= (1<<3);  // 打开 GPIOB 时钟
RCC_APB2ENR |= (1<<4);  // 打开 GPIOC 时钟
RCC_APB2ENR |= (1<<2);  // 打开 GPIOA 时钟

2. 初始化

GPIO口有八种模式:

输入浮空
输入上拉
输入下拉
模拟输入
开漏输出
推挽式输出
推挽式复用功能
开漏复用功能
这里使用推挽输出


端口1-7为低,端口8-15为高。每个引脚由四个位控制。
以GPIOB和0号引脚(B0)为例,将其设置为推挽输出,并设置最大速度为10MHz,则将控制B0的四个位设置为0001:

#define GPIOB_CRL (*(unsigned int *)0x40010c00)// 最后四位变为0001
GPIOB_CRL |= (1<<0);  // 最后一位变1
GPIOB_CRL &= ~(0xE<<0);  // 倒数2、3、4位变0

对于GPIOB的B0、GPIOC的C15、GPIOA的A0,设置如下:

#define GPIOB_CRL (*(unsigned int *)0x40010C00)
#define GPIOC_CRH (*(unsigned int *)0x40011004)
#define GPIOA_CRL (*(unsigned int *)0x40010800)// 配置 GPIO 口为推免输出
// GPIOB----最后四位为0001
GPIOB_CRL |= (1<<0);  // 最后一位变1
GPIOB_CRL &= ~(0xE<<0);  // 倒数2、3、4位变0
// GPIOC----前四位为0001
GPIOC_CRH |= (1<<28);  //  第四位变1
GPIOC_CRH &= ~(0xE0000000);  // 前三位变0
// GPIOA----最后四位为0001
GPIOA_CRL |= (1<<0);  // 最后一位变1
GPIOA_CRL &= ~(0xE<<0);  // 倒数2、3、4位变0

3. 设置低电平


输出高电平则为1,低电平则为0

以GPIOB和0号引脚(B0)为例,将其设置为低电平:

`#define GPIOB_ODR (*(unsigned int *)0x40010C0C)
GPIOB_ODR &= ~(1<<0);  // 最后一位变0

对于GPIOB的B0、GPIOC的C15、GPIOA的A0,
设置如下:

#define GPIOB_ODR (*(unsigned int *)0x40010C0C)
#define GPIOC_ODR (*(unsigned int *)0x4001100C)
#define GPIOA_ODR (*(unsigned int *)0x4001080C)GPIOB_ODR &= ~(1<<0);  //最后一位变为0
GPIOC_ODR &= ~(1<<15); //倒数16位变为0
GPIOA_ODR &= ~(1<<0);  //最后一位变为

三、创建项目

1. 新建项目

点击Project下的New uVision Project:

选择项目路径,填写文件名

选择芯片:

点击ok:

右击文件夹,添加新文件:

选择.c,文件名为main:

将所需要的启动文件复制到项目目录下(f103c8t6启动文件为startup_stm32f10x_md.s:

(可以在磁盘里面搜索)

然后复制粘贴在之前所创的LED项目目录下。

右击文件夹,选择Add Existing Files to Group Source Group 1(或双击文件夹):

选择All FIles,选择刚刚添加的启动文件,Add,Add之后Close:

打开魔术棒,如下图所示勾选Create HEX File:

2. 编写代码

总代码:


#define GPIOB_BASE 0x40010C00
#define GPIOC_BASE 0x40011000
#define GPIOA_BASE 0x40010800#define RCC_APB2ENR (*(unsigned int *)0x40021018)#define GPIOB_CRL (*(unsigned int *)0x40010C00)
#define GPIOC_CRH (*(unsigned int *)0x40011004)
#define GPIOA_CRL (*(unsigned int *)0x40010800)#define GPIOB_ODR (*(unsigned int *)0x40010C0C)
#define GPIOC_ODR (*(unsigned int *)0x4001100C)
#define GPIOA_ODR (*(unsigned int *)0x4001080C)void SystemInit(void);
void Delay_ms(volatile  unsigned  int);void Delay_ms( volatile  unsigned  int  t)
{unsigned  int  i;while(t--)for (i=0;i<800;i++);
}int main(){// 开启时钟RCC_APB2ENR |= (1<<3); // 开启 GPIOB 时钟RCC_APB2ENR |= (1<<4); // 开启 GPIOC 时钟RCC_APB2ENR |= (1<<2); // 开启 GPIOA 时钟// 设置 GPIO 为推挽输出// 设置 GPIOB 最后四位为 0001 (B0)GPIOB_CRL |= (1<<0);  // 最后一位设置为1GPIOB_CRL &= ~(0xE);  // 倒数二、三、四位设置为0// 设置 GPIOC 前四位为 0001  (C15)GPIOC_CRH |= (1<<28); // 第四位设置为1GPIOC_CRH &= ~(0xE0000000);  // 前三位设置为0// 设置 GPIOA 最后四位为 0001 (A0)GPIOA_CRL |= (1<<0);  // 最后一位设置为1GPIOA_CRL &= ~(0xE);  // 倒数二、三、四位设置为0// 3个LED初始化为不亮(即高点位)GPIOB_ODR |= (1<<0);  // 最后一位设置为1GPIOC_ODR |= (1<<15); // 倒数第15位设置为1GPIOA_ODR |= (1<<0);  // 最后一位设置为1while(1){GPIOB_ODR &= ~(1<<0); // 点灯1Delay_ms(1000000);GPIOB_ODR |= (1<<0);  // 灭灯1Delay_ms(1000000);GPIOC_ODR &= ~(1<<15); // 点灯2Delay_ms(1000000);GPIOC_ODR |= (1<<15);  // 灭灯2Delay_ms(1000000);GPIOA_ODR &= ~(1<<0); // 点灯3Delay_ms(1000000);GPIOA_ODR |= (1<<0);  // 灭灯3Delay_ms(1000000);}}void SystemInit(){}

四、连接电路

对于USB转TTL模块和stm32f103c8t6连接

GND — GND
3v3 — 3v3
TXD — A10
RXD — A9

总电路:

编译:

连接到电脑,打开mcuisp,上传HEX文件到stm32f103c8t6上:


灯就亮起来了

五、总结

本实验是STM32 F103之点亮LED流水灯,过程还是挺艰辛,有很多小错误,需要去搜索,查询。

STM32F103点亮LED灯相关推荐

  1. 使用STM32f103点亮led灯——库函数版本

    本文章是结合我这一年的学习与应用,总结出来的经验与知识(主要为了应用),欢迎读者们学习和指导. 前言 资料 : 链接:https://pan.baidu.com/s/1pr57NSXFmax06kqP ...

  2. STM32F103实验一:点亮LED灯

    STM32F103点亮LED 这条博客是基于正点原子mini板的代码. 创建文件夹.源文件以及设置路径就不讲了,直接附上代码. 库函数配置步骤 在模板中新建文件夹用于存放 led.c 和 led.h文 ...

  3. 基于STM32F103入门1——点亮LED灯

    今天学习了STM32固件库点灯程序 点灯也可以玩过很多好玩的东西,在这里做一下总结. STM32点灯程序合集 1:新建固件库工程文件 1.1找到一个固件库模板 1.2:打开KEIL5新建工程 1.3: ...

  4. 基于STM32F103芯片实现LED灯闪烁

    基于STM32F103芯片实现LED灯闪烁 前言 一,寄存器配置 1,时钟控制 2,GPIO端口设置: 二.实际操作 1.具体代码 2.keil5项目运行 3.硬件的连接 4.链接到 mcuisp 串 ...

  5. STM32F103开关控制LED灯

    本文主要介绍了通过中断来实现开关控制LED灯的亮和灭. 软件:Keil μVision 芯片:STM32F103C8T6 文章目录 一.实验简介 二.实验原理 1. NVIC简介 2.EXTI简介 三 ...

  6. 普中仿真器无法使用解决方法和用库函数点亮LED灯

    文章目录 解决普中stm32F103玄武无法仿真问题 使用库函数点亮LED灯 解决普中stm32F103玄武无法仿真问题 问题描述 该开发板可以使用串口下载程序,但是无法仿真.每一次仿真,总是会出现 ...

  7. 一灯大师,基于imx6ull点亮LED灯

    一.imx6ull GPIO原理 1. STM32 GPIO回顾 我们一般拿到一款全新的芯片,第一个要做的事情的就是驱动其 GPIO,控制其 GPIO 输出高低电平,我们学习 I.MX6U 也一样的, ...

  8. 和12岁小同志搞创客开发:手撕代码,点亮LED灯

    目录 1.Arduino编程架构 2.点亮LED灯 机缘巧合在网上认识一位12岁小同志,从零开始系统辅导其创客开发思维和技巧. 项目专栏:https://blog.csdn.net/m0_381069 ...

  9. STM32F 103C8T6开发板 点亮LED灯

    每组IO口含下面7个寄存器.7个寄存器可以控制一组GPIO的16个IO口. GPIOx_CRL:端口配置低寄存器 GPIOx_CRH:端口配置高寄存器 GPIOx_IDR:端口输入寄存器 GPIOx_ ...

最新文章

  1. Gradle安装使用以及基本操作
  2. 单机安装oracle,Oracle 11G 单机安装
  3. 提升软文营销曝光量可从这几方面着手操作
  4. Replation requires the actual server name ... Replication.Utilies
  5. C#求一元二次方程的根经典案例程序
  6. 动态规划训练20 [Treats for the Cows POJ - 3186 ]
  7. 【渝粤题库】陕西师范大学200311常微分方程作业(高起本)
  8. 日志中出现乱码_合宙Luat | 乱码搞得一团糟?开源神器帮你轻松修复
  9. 遵循Java EE标准规范的开源GIS服务平台之三:数据发布与访问
  10. HTTP的⼏种请求⽅法及⽤途小谈(面试)
  11. vscode下载太慢,修改下载地址提速
  12. 如何在Nintendo交换机上设置家长控制
  13. UE4学习笔记(3)——World Composition无缝拼接地图实现
  14. 2022中式面点师(高级)考试模拟100题及在线模拟考试
  15. IDEA使用破解补丁激活
  16. 感动世界的50首歌和他们背后的故事3
  17. 全国计算机二级office选择题知识点,全国计算机二级考试MS office选择题知识点合集(通用)...
  18. mfc使用键盘加速键
  19. 云计算系统测试之技术概念
  20. 物联网漏洞挖掘入门--DLINK-DIR-645路由器栈溢出漏洞分析复现

热门文章

  1. 【综述】NLP 对抗训练(FGM、PGD、FreeAT、YOPO、FreeLB、SMART)
  2. 【Java】Map介绍和使用
  3. 物联网毕业设计 单片机智能手环设计与实现
  4. 第2课时 初识机器学习
  5. 文件上传,下载,预览,删除(File),分页接口
  6. 天龙八部 - 挖图 - 如何加大进副本机率
  7. react 的 connect 与 @connect
  8. 水力学(一、液体的物理性质和作用力)
  9. [观点]诺基亚是如何衰落的
  10. FSMC版本:多驱动器(ILI9486L等)驱动TFTLCD屏幕