IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 基于STM32F103芯片实现LED灯闪烁 -> 正文阅读

[嵌入式]基于STM32F103芯片实现LED灯闪烁


前言

stm32f103c8t6最小核心学习板包含了以下成分:

1.四方扁平封装的主要MCU – STM32F103C8T6。

2.重置开关–重置微控制器。

3.microUSB端口–用于串行通信和电源。

4.BOOT选择器跳线– BOOT0和BOOT1跳线,用于选择引导存储器。

5.两个LED –用户LED和电源LED。

6.8 MHz晶振– MCU的主时钟。

7.32.768KHz振荡器– RTC时钟。

8.SWD接口–用于使用ST-Link进行编程和调试。

9.3.3V稳压器(在底部)–将5V转换为3.3V,以为MCU供电。


提示:以下是本篇文章正文内容,下面案例可供参考

一,寄存器配置

1,时钟控制

时钟控制名字叫做RCC,属于AHB总线。

在这里插入图片描述
我们可以在6.3.7小节找到APB2外设时钟使能寄存器(RCC_APB2ENR),偏移地址是0x18,所以APB2的地址就是0x4002 1018。
在这里插入图片描述
首先对RCC寄存器定义

#define RCC_APB2ENR (*(unsigned int *)0x40021018)

根据上图可知,想要使GPIOX端口时钟使能,就可以把RCC_APB2ENR的位X赋值为1,就可以开启该端口的时钟。

	RCC_APB2ENR |= (1<<3); //GPIOB端口时钟使能
	RCC_APB2ENR |= (1<<4); //GPIOC端口时钟使能	
	RCC_APB2ENR |= (1<<2); //GPIOA端口时钟使能

2,GPIO端口设置:

总所周知,stm32每一组GPIO端口都配置有7种寄存器

1.端口配置低寄存器GPIOx_CRL
2.端口配置高寄存器(GPIOx_CRH)
3.端口输入数据寄存器(GPIOx_IDR)
4.端口输出数据寄存器(GPIOx_ODR)
5.端口位设置/ 清除寄存器(GPIOx_BSRR)
6.端口位清除寄存器(GPIOx_BRR)
7.端口配置锁定寄存器(GPIOx_LCKR)

STM32中,用端口配置低寄存器(GPIOx_CRL)来配置引脚Px0-Px7, 用端口配置高寄存(GPIOx_CRH)来配置引脚Px8-Px15。

我在实验中使用了A0,B9,C14三个串行口,定义的寄存器分别是

偏移地址是0x04,意思是在基地址的基础上再加0x04,所以,对于GPIOB来说就是0x4001 0c04。如果配置PB0-PB7,那么需要的寄存器是低位的寄存器GPIOB_CRL,它的地址是0x4001 0c00。
  在这里插入图片描述

#define GPIOA_CRL	*((unsigned volatile int*)0x40010800)
#define	GPIOA_ORD	*((unsigned volatile int*)0x4001080C)

#define GPIOB_CRH	*((unsigned volatile int*)0x40010C04)
#define	GPIOB_ORD	*((unsigned volatile int*)0x40010C0C)

#define GPIOC_CRH	*((unsigned volatile int*)0x40011004)
#define	GPIOC_ORD	*((unsigned volatile int*)0x4001100C)

其中GPIO_ORD寄存器的第一位设置为0则代表串行口输出低电平,ODR的第2位设置为1则代表P2口输出高电平。
已知点亮LED灯需要输出低电平,

		GPIOA_ORD=0x0<<0;		//PA0亮
		Delay_ms(5000000);      //设置时延
		GPIOA_ORD=0x1<<0;		//PA0灭
		Delay_ms(5000000);
		
		GPIOB_ORD=0x0<<9;		//PB9亮
		Delay_ms(5000000); 
		GPIOB_ORD=0x1<<9;		//PB9灭
		Delay_ms(5000000); 
		
		GPIOC_ORD=0x0<<15;		//PC15亮
		Delay_ms(5000000);   
		GPIOC_ORD=0x1<<15;		//PC15灭
		Delay_ms(5000000); 

其中Delay_ms()是设置的时延函数,具体多少时间没有计算,跟着感觉来的。

再就是输出的选择
在这里插入图片描述

我们在这里使用的是推免输出。

二、实际操作

1.具体代码

#define GPIOB_BASE 0x40010C00BSRR:
//端口位设置/ 清除寄存器(GPIOx_BSRR),该寄存器其实是间接控制ODR寄存器
#define GPIOC_BASE 0x40011000
#define GPIOA_BASE 0x40010800

#define RCC_APB2ENR (*(unsigned int *)0x40021018)

#define GPIOA_CRL	*((unsigned volatile int*)0x40010800)
#define	GPIOA_ORD	*((unsigned volatile int*)0x4001080C)

#define GPIOB_CRH	*((unsigned volatile int*)0x40010C04)
#define	GPIOB_ORD	*((unsigned volatile int*)0x40010C0C)

#define GPIOC_CRH	*((unsigned volatile int*)0x40011004)
#define	GPIOC_ORD	*((unsigned volatile int*)0x4001100C)

	
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(){
	//GPIO端口时钟使能
	RCC_APB2ENR |= (1<<3); 
	RCC_APB2ENR |= (1<<4); 
	RCC_APB2ENR |= (1<<2); 
	
	GPIOA_CRL&=0xFFFFFFF0;
	GPIOA_CRL|=0x00000002;	//PA0推免输出	
	GPIOA_ORD|=1<<0;	//设置灯初始为亮	
	
	GPIOB_CRH&=0xFFFFFF0F;		
	GPIOB_CRH|=0x00000020;		//PB9
	GPIOB_ORD|=1<<9;		//设置初始灯为灭	
	
	GPIOC_CRH&=0xF0FFFFFF;	
	GPIOC_CRH|=0x03000000;   	//PC15
	GPIOC_ORD|=0x1<<14;	//设置初始灯为灭		
	while(1)
	{	
		GPIOA_ORD=0x0<<0;		//PA0低电平
		Delay_ms(5000000);
		GPIOA_ORD=0x1<<0;		//PA0高电平
		Delay_ms(5000000);
		
		GPIOB_ORD=0x0<<9;		//PB9低电平
		Delay_ms(5000000);
		GPIOB_ORD=0x1<<9;		//PB9高电平
		Delay_ms(5000000);
		
		GPIOC_ORD=0x0<<14;		//PC15低电平
		Delay_ms(5000000);
		GPIOC_ORD=0x1<<14;		//PC15高电平
		Delay_ms(5000000);
	}

}


2.keil5项目运行

1.新建项目名字为stm
2.芯片选择stm32f103c8
请添加图片描述

请添加图片描述
4.
请添加图片描述
请添加图片描述
5.运行
请添加图片描述

没有错误

3.硬件的连接

固定连接:

USB接口STM32最小系统板
GNDGND
3V33V3
RXDA9
TXDA10

其余连接:
如图所示
请添加图片描述

4.链接到 mcuisp 串口链接软件上

将硬件的usb接口链接到电脑上,然后点击 开始编程
请添加图片描述

5,LED灯闪烁

请添加图片描述


总结

这次实验对我们的学习是一次很大的历练,学到了更多 的stm的知识,也增加了动手能力,虽然遇到了挺多困难的,但是还是有很多的收获。

参考文献

https://blog.csdn.net/qq_43445076/article/details/88896383
https://blog.csdn.net/geek_monkey/article/details/86291377
https://blog.csdn.net/geek_monkey/article/details/86293880

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-24 15:04:06  更:2021-10-24 15:04:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:40:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码