用STM32F103C8T6实现红绿蓝LED流水灯
目录
- 一、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流水灯相关推荐
- STM32F103C8T6寄存器简单应用之LED流水灯
一.关于STM32寄存器 STM32F103C8T6是一款基于ARM Cortex-M 内核STM32系列的32位的微控制器,程序存储器容量是64KB,需要电压2V~3.6V,工作温度为-40°C ~ ...
- 【嵌入式知识07】借助stm32CubeMX,使用STM32F103C8T6点亮LED流水灯
本文目录 一.简述 二.STM32CubeMX简介 1.利用CubeMX新建工程点亮LED灯 1)前期准备 2)新建工程 2.界面讲解 3.配置引脚 4.时钟源配置 5.工程管理 三.点亮LED 1. ...
- 【嵌入式08】STM32F103C8T6寄存器方式借助面包板点亮LED流水灯详解
文章目录 一.题目简述 二.简述:初始化GPIO,点亮LED灯 三.工程文件模板的建立 四.使用寄存器点亮LED灯--代码部分 1.硬件连接设计 2.打开之前建立的工程模板 3.代码编写 4.硬件连接 ...
- 以TM32最小系统核心板(STM32F103C8T6)为主,实现led流水灯
文章目录 题目要求 一.GPIOx端口的各寄存器地址和详细参数 二.用C语言 寄存器方式编程实现 1.新建文件 2.代码写入 2.1 启动代码 2.1.1 介绍启动代码 2.1.2 添加启动代码 2. ...
- 【嵌入式04】用寄存器HAL库完成LED流水灯程序
目录 一.原理学习 1.寄存器映射原理 2.GPIO端口的初始化设置步骤 二.LED流水灯 1.程序设计思路 2.寄存器方式编程实现 3.HAL库编程实现 4.软件仿真 三.总结 四.参考链接 一.原 ...
- STM32F103寄存器方式点亮LED流水灯
实验要求:以 STM32最小系统核心板(STM32F103C8T6)+面板板+3只红绿蓝LED 搭建电路,使用GPIOB.GPIOC.GPIOD这3个端口控制LED灯,轮流闪烁,间隔时长1秒.1)写出 ...
- 【嵌入式基础】用C语言编程、寄存器实现LED流水灯程序;stm32CubeMX+Keil使用HAL库点亮流水灯
本文主要介绍STM32F103系列芯片的地址映射和寄存器映射原理,GPIO端口的初始化设置步骤.利用C语言编程和寄存器点亮流水灯以及stm32CubeMX+Keil使用HAL库点灯 目录 一.STM3 ...
- 用寄存器HAL库完成LED流水灯程序
STM32的地址映射.寄存器映射原理以及GPIO端口的初始化设置三步骤 (一)STM32F103系列芯片的地址映射及寄存器映射原理 1.STM32F103C8T6简要介绍 ● STM32F103C8 ...
- 用寄存器HAL库完成LED流水灯程序以及通过MDK5模拟示波器观察波形
文章目录 前言 一.相关寄存器配置介绍 1.相关寄存器配置介绍 二.使用寄存器点亮LED灯 1.工程模板的建立 2.配置GPIO端口 3.主要函数 4.编译生成HEX文件 5.电路搭建 三.STM32 ...
最新文章
- Quartz的Scheduler初始化源码分析
- python 有趣的变量_Python进阶之路 3.2有趣的赋值操作
- 全球最畅销的10款手机:iPhone 11继续无敌,能对拼的只有它!
- 事件模型 java_事件驱动模型的简单Java实现
- 一个MySQL 5.7 分区表性能下降的案例分析
- MacOS使用技巧总结
- 一种word版题库制作成excel版步骤
- matlab 自适应遗传算法,自适应遗传算法MATLAB代码
- 单例模式几种实现方式和代码
- PTAM特征点法跟踪和建图 SLAM FAST Patch
- 初唐名臣---凌烟阁上二十四功臣
- lingo入门——从河北省第三届研究生建模竞赛B题开始
- 小米10如何安装google play商店
- 开博记念及附上第一个android工程:Txt文本阅读器
- 学习笔记:贝塞尔曲线法
- 获取股票数据【使用JQData查询行情数据、财务指标、估值指标】
- Native Instruments Guitar Rig 5 Player WiN-MAC 免费的电吉他效果器
- 华为:海思坚持研发尖端半导体,不会进行任何重组或裁员;百度网盘下线SVIP会员免第三方广告特权;一加宣布与OPPO合并...
- 俄勒冈大学计算机科学专业,俄勒冈大学计算机与信息科学详解 热门专业还等什么...
- xshell突出显示集——自定义配置
热门文章
- 使用免费OA系统,让你成为职场锦鲤
- 昱章电气IPO被终止:曾拟募资4.25亿 年营收3.25亿
- 现代主页设计应包含的基本要素
- Maven 项目使用开源中国镜像
- 宝塔接php支付,支付宝免签约辅助AlipaySupervisor宝塔面板使用教程
- IDF实验室 聪明的小羊
- C语言编程求fibonacci前20项,c语言,编程实现,求斐波那契数列,1,1,2,3,5,8,......的前20项及前20项和知道...
- 【代码随想录】Day38~Day46动态规划
- 洛谷P1209 [USACO1.3]修理牛棚 Barn Repair----解题报告
- 一元多项式相加(单链表c艹)