目录

  • 一、STM32F103C8T6简介
  • 二、GPIOx端口的各寄存器地址和详细参数
    • 2.1寄存器分别如下
    • 2.2寄存器地址
    • 2.3时钟地址
    • 2.4GPIO寄存器描述CRL与CRH
    • 2.5GPIO端口初始化设置及输入输出模式
  • 三、实验过程
    • 3.1创建一个工程
    • 3.2启动代码
    • 3.3添加启动代码
  • 4功能分析
  • 5代码如下
  • 6工程调试编译
    • 6.1写入.c工程文件中,build生成hex文件:
    • 6.2成功调试
    • 6.3 实验效果
  • 四、总结

一、STM32F103C8T6简介

STM32F103C8T6是一款由意法半导体公司(ST)推出的基于Cortex-M3内核的32位微控制器,硬件采用LQFP48封装,属于ST公司微控制器中的STM32系列。除了被我们熟知的STM32,ST公司还有SPC5X系列、STM8系列等,具体参数如下:

二、GPIOx端口的各寄存器地址和详细参数

每组GPIO下面包含10个寄存器。也就是10个寄存器,一共可以控制一组GPIO的16个IO口。最多7组IO,也就是70个寄存器。

2.1寄存器分别如下

一个端口模式寄存器(GPIOx_MODER)

一个端口输出类型寄存器(GPIOx_OTYPER)

一个端口输出速度寄存器(GPIOx_OSPEEDR)

一个端口上拉下拉寄存器(GPIOx_PUPDR)

一个端口输入数据寄存器(GPIOx_IDR)

一个端口输出数据寄存器(GPIOx_ODR)

一个端口置位/复位寄存器(GPIOx_BSRR)

一个端口配置锁存寄存器(GPIOx_LCKR)

两个复用功能寄存器(低位GPIOx_AFRL& GPIOx_AFRH)

2.2寄存器地址

2.3时钟地址

2.4GPIO寄存器描述CRL与CRH

CRL与CRH分别为端口配置低与端口配置高寄存器,为32位寄存器,其中每四位控制一个I/O口

对CNFy与MODEy(y=0,1,2…7)位写1或0控制I/O口的输入输出模式

STM32I/O口都是16位的,CRL与CRH分别控制低8位与高8位,两个寄存器的用法与功能完全一模一样.
例:将GPIOB9配置成推挽输出模式,且最大速度为2MHz
首先,其为GPIOB9端口,其属于端口配置高寄存器模块,则由图8.2.2可知,CNF9和MODE9位为0,其余位为F,即:GPIOB_CRH&=0xFFFFFF0F;又因其为推挽输出模式,且最大速度为2MHz,所以4位寄存器的配置就是CNF9【00】MODE9【10】,0010换成十进制数就是2,即:GPIOB_CRH|=0x00000020

2.5GPIO端口初始化设置及输入输出模式

第一步:使能GPIOx口的时钟
第二步:指明GPIOx口的哪一位,这一位的速度大小以及模式
第三步:调用GPIOx初始化函数进行初始化
第四步:调用GPIO-SetBits函数,进行相应位的置位
代码及注释见上一篇主页csdn博客。

三、实验过程

3.1创建一个工程

新建一个text1文件夹,在keil的project点击New uVision Project 然后输入文件名text1

本次实验采用C8T6板,所以选择STM32F103C8
:
在界面左侧的Project栏,打开Target1,鼠标右键单击Source Group1, 选择Add New Item to Group

添加.c文件:

3.2启动代码

启动代码介绍
启动代码是一段和硬件相关的汇编代码
主要作用如下:
1、堆栈(SP)的初始化
2、初始化程序计数器(PC)
3、设置向量表异常事件的入口地址
4、调用 main 函数

ST 公司提供了 3 个启动文件给我们,分别用于不同容量的 STM32 芯片,这三个文件是:
startup_stm32f10x_ld.s、startup_stm32f10x_md.s、startup_stm32f10x_hd.s

其中,ld.s 适用于小容量 产品;md.s 适用于中等容量产品;hd 适用于大容量产品;这里的容量是指 FLASH 的大小
判断方法如下:
小容量:FLASH≤32K
中容量:64K≤FLASH≤128K
大容量:256K≤FLASH

通过查阅资料可知,C8T6的Flash容量为128K,属于中容量,因此这里采用startup_stm32f10x_md.s作为启动文件

3.3添加启动代码

STM32F103C8T6核心板启动文件下载链接:
链接:https://pan.baidu.com/s/1Elgc4nvxXjiHLSZ2nXnSCQ
提取码:bmba


下载安装包并解压:

将启动文件拷贝到Text1工程文件夹下:

回到Keil,展开Target1→双击Source Group1→设置打开文件类型为 Asm Source file→选择 startup_stm32f10x_md.s→点击 Add:


点击魔法棒设置生成HEX文件(后面烧录需要!):

4功能分析

根据题目要求,使用GPIOA-5、GPIOB-9、GPIOC-14 这3个引脚来控制LED灯,在查询C8T6数据手册后,管脚分别连接红绿蓝三种颜色的LED灯
目标是把 GPIO 的引脚设置成推挽输出模式并且默认下拉,输出低电平,这样就能让 LED 灯亮起来

5代码如下

#define GPIOB_BASE 0x40010C00
#define GPIOC_BASE 0x40011000
#define GPIOA_BASE 0x40010800#define RCC_APB2ENR (*(unsigned int *)0x40021018)#define GPIOB_CRH (*(unsigned int *)0x40010C04)
#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 A_LED_LIGHT(void);
void B_LED_LIGHT(void);
void C_LED_LIGHT(void);
void Delay_ms( volatile  unsigned  int  t)
{unsigned  int  i;while(t--)for (i=0;i<800;i++);
}void A_LED_LIGHT(){GPIOA_ODR=0x0<<5;     //PA5低电平GPIOB_ODR=0x1<<9;     //PB9高电平GPIOC_ODR=0x1<<14;        //PC14高电平
}
void B_LED_LIGHT(){GPIOA_ODR=0x1<<5;      //PA5高电平GPIOB_ODR=0x0<<9;     //PB9低电平GPIOC_ODR=0x1<<14;        //PC14高电平
}
void C_LED_LIGHT(){GPIOA_ODR=0x1<<5;      //PA5高电平GPIOB_ODR=0x1<<9;     //PB9高电平GPIOC_ODR=0x0<<14;        //PC14低电平
}int main(){int j=100;// 开启时钟RCC_APB2ENR |= (1<<3); // 开启 GPIOB 时钟RCC_APB2ENR |= (1<<4); // 开启 GPIOC 时钟RCC_APB2ENR |= (1<<2); // 开启 GPIOA 时钟// 设置 GPIO 为推挽输出GPIOB_CRH&= 0xffffff0f;   //清零        GPIOB_CRH|=0x00000020;  //PB9推挽输出GPIOC_CRH &= 0xf0ffffff; //清零  GPIOC_CRH|=0x02000000;  //PC14推挽输出GPIOA_CRL &= 0xff0fffff; //清零GPIOA_CRL|=0x00200000; //PA5推挽输出// 3个LED初始化为不亮(即高点位)GPIOB_ODR |= (1<<9); GPIOC_ODR |= (1<<14); GPIOA_ODR |= (1<<5);  while(j){B_LED_LIGHT();Delay_ms(300000);C_LED_LIGHT();Delay_ms(300000);A_LED_LIGHT();Delay_ms(300000);}}void SystemInit(){}

6工程调试编译

6.1写入.c工程文件中,build生成hex文件:

6.2成功调试

6.3 实验效果

通信工程-632007030434-黎元杰(0)

四、总结

通过本次实验加深对GPIO寄存器的知识的理解和运用。
参考链接
https://blog.csdn.net/qq_46467126/article/details/120791793?spm=1001.2014.3001.5502

用STM32F103C8T6实现红绿蓝LED流水灯相关推荐

  1. STM32F103C8T6寄存器简单应用之LED流水灯

    一.关于STM32寄存器 STM32F103C8T6是一款基于ARM Cortex-M 内核STM32系列的32位的微控制器,程序存储器容量是64KB,需要电压2V~3.6V,工作温度为-40°C ~ ...

  2. 【嵌入式知识07】借助stm32CubeMX,使用STM32F103C8T6点亮LED流水灯

    本文目录 一.简述 二.STM32CubeMX简介 1.利用CubeMX新建工程点亮LED灯 1)前期准备 2)新建工程 2.界面讲解 3.配置引脚 4.时钟源配置 5.工程管理 三.点亮LED 1. ...

  3. 【嵌入式08】STM32F103C8T6寄存器方式借助面包板点亮LED流水灯详解

    文章目录 一.题目简述 二.简述:初始化GPIO,点亮LED灯 三.工程文件模板的建立 四.使用寄存器点亮LED灯--代码部分 1.硬件连接设计 2.打开之前建立的工程模板 3.代码编写 4.硬件连接 ...

  4. 以TM32最小系统核心板(STM32F103C8T6)为主,实现led流水灯

    文章目录 题目要求 一.GPIOx端口的各寄存器地址和详细参数 二.用C语言 寄存器方式编程实现 1.新建文件 2.代码写入 2.1 启动代码 2.1.1 介绍启动代码 2.1.2 添加启动代码 2. ...

  5. 【嵌入式04】用寄存器HAL库完成LED流水灯程序

    目录 一.原理学习 1.寄存器映射原理 2.GPIO端口的初始化设置步骤 二.LED流水灯 1.程序设计思路 2.寄存器方式编程实现 3.HAL库编程实现 4.软件仿真 三.总结 四.参考链接 一.原 ...

  6. STM32F103寄存器方式点亮LED流水灯

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

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

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

  8. ​用寄存器HAL库完成LED流水灯程序

    STM32的地址映射.寄存器映射原理以及GPIO端口的初始化设置三步骤 ​(一)STM32F103系列芯片的地址映射及寄存器映射原理 1.STM32F103C8T6简要介绍 ● STM32F103C8 ...

  9. 用寄存器HAL库完成LED流水灯程序以及通过MDK5模拟示波器观察波形

    文章目录 前言 一.相关寄存器配置介绍 1.相关寄存器配置介绍 二.使用寄存器点亮LED灯 1.工程模板的建立 2.配置GPIO端口 3.主要函数 4.编译生成HEX文件 5.电路搭建 三.STM32 ...

最新文章

  1. Quartz的Scheduler初始化源码分析
  2. python 有趣的变量_Python进阶之路 3.2有趣的赋值操作
  3. 全球最畅销的10款手机:iPhone 11继续无敌,能对拼的只有它!
  4. 事件模型 java_事件驱动模型的简单Java实现
  5. 一个MySQL 5.7 分区表性能下降的案例分析
  6. MacOS使用技巧总结
  7. 一种word版题库制作成excel版步骤
  8. matlab 自适应遗传算法,自适应遗传算法MATLAB代码
  9. 单例模式几种实现方式和代码
  10. PTAM特征点法跟踪和建图 SLAM FAST Patch
  11. 初唐名臣---凌烟阁上二十四功臣
  12. lingo入门——从河北省第三届研究生建模竞赛B题开始
  13. 小米10如何安装google play商店
  14. 开博记念及附上第一个android工程:Txt文本阅读器
  15. 学习笔记:贝塞尔曲线法
  16. 获取股票数据【使用JQData查询行情数据、财务指标、估值指标】
  17. Native Instruments Guitar Rig 5 Player WiN-MAC 免费的电吉他效果器
  18. 华为:海思坚持研发尖端半导体,不会进行任何重组或裁员;百度网盘下线SVIP会员免第三方广告特权;一加宣布与OPPO合并...
  19. 俄勒冈大学计算机科学专业,俄勒冈大学计算机与信息科学详解 热门专业还等什么...
  20. xshell突出显示集——自定义配置

热门文章

  1. 使用免费OA系统,让你成为职场锦鲤
  2. 昱章电气IPO被终止:曾拟募资4.25亿 年营收3.25亿
  3. 现代主页设计应包含的基本要素
  4. Maven 项目使用开源中国镜像
  5. 宝塔接php支付,支付宝免签约辅助AlipaySupervisor宝塔面板使用教程
  6. IDF实验室 聪明的小羊
  7. C语言编程求fibonacci前20项,c语言,编程实现,求斐波那契数列,1,1,2,3,5,8,......的前20项及前20项和知道...
  8. 【代码随想录】Day38~Day46动态规划
  9. 洛谷P1209 [USACO1.3]修理牛棚 Barn Repair----解题报告
  10. 一元多项式相加(单链表c艹)