第四周作业

一、实验内容和任务

1、原理学习。学习和理解STM32F103系列芯片的地址映射和寄存器映射原理;了解GPIO端口的初始化设置三步骤(时钟配置、输入输出模式设置、最大速率设置)。

2、假设你手中已有 STM32最小系统核心板(STM32F103C8T6)+面板板+3只红绿蓝LED,并搭建了电路,分别GPIOA-5、GPIOB-9、GPIOC-14 这3个引脚上控制LED灯(最高时钟2Mhz),轮流闪烁,间隔时长1秒。1)写出程序设计思路,包括GPIOx端口的各寄存器地址和详细参数;2)用C语言 寄存器方式编程实现。3)安装 stm32CubeMX,用cubemx完成初始化过程,采用HAL库编程实现。4)在Keil下用软件仿真运行上面代码,并用虚拟逻辑分析仪观察 对应管脚上的输出波形(高低电平转换),看是否是1秒的周期。

二、实验要求

1. 分组要求:每个学生独立完成,即1人1组。

2. 程序及报告文档要求:具有较好的可读性,如叙述准确、标注明确、截图清晰等。

3.项目代码上传github,同时把项目完整打包为zip文件,与实验报告(Markdown源码及PDF文件)、作业博客地址一起提交到学习通。

三. 实验过程介绍 (此处可以填博客内容)

一、用C语言 寄存器方式编程实现。

1.新建工程

双击打开keil,点击菜单栏Project–>New μVision Project,新建项目,在弹窗中设置工程项目的名称和路径,在这里,我新建名为LED的工程文件。

注册

1.点击运行注册器程序。

2.在桌面找到keil软件图标,点击右键,以管理员身份运行。

3.点击File–>Lincense Management–>Single-User Lincense,找到CID,复制CID中的内容填写到注册器的CID空白处,将注册器中Target选择为ARM,点击Generate,得到注册码。

4.将生成的注册码复制粘贴到Keil的New Lincense ID Code空白处,点击Add LIC,点击Close。

支持包安装

点击运行下载的支持包,NEXT开始安装,安装完成,点击Finish。

二、完成一个基于STM32汇编程序的编写

1.新建工程

双击打开keil,点击菜单栏Project–>New μVision Project,新建项目,在弹窗中设置工程项目的名称和路径,在这里,我新建名为TEST的工程文件。

2.配置环境

选择设备

点击菜单中的Project,找到Options for Target ‘Target 1’并点击,在弹窗中选择相应的目标环境,此处我选的是STM32F103C8

在这里插入图片描述

选择运行环境

点击ok后,对Run-Time Environment进行设置,在箭头所指的这个地方打上勾

在这里插入图片描述

误操作后也可点击下面这个图标重新对Run-Time Environment进行设置

在这里插入图片描述

然后点击图中箭头所指的地方

在这里插入图片描述

勾选上Create HEX_File

在这里插入图片描述

3.添加源文件

source group里创建led.c,并写入代码,注意项目结构,使用的引脚是PA4,PB9,PC15

将下图代码复制粘贴到该led.c中

#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<<4;		//PA4???
	GPIOB_ODR=0x1<<9;		//PB9???
	GPIOC_ODR=0x1<<15;		//PC15???
}
void B_LED_LIGHT(){
	GPIOA_ODR=0x1<<4;		//PA4???
	GPIOB_ODR=0x0<<9;		//PB9???
	GPIOC_ODR=0x1<<15;		//PC15???
}
void C_LED_LIGHT(){
	GPIOA_ODR=0x1<<4;		//PA4???
	GPIOB_ODR=0x1<<9;		//PB9???
	GPIOC_ODR=0x0<<15;		//PC15???	
}

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 &= 0x0fffffff; //??? ??		
	GPIOC_CRH|=0x30000000;  //PC15????


	GPIOA_CRL &= 0xfff0ffff; //??? ??		
	GPIOA_CRL|=0x00010000; //PA4????

	// 3?LED??????(????)
	GPIOB_ODR |= (1<<9); 
	GPIOC_ODR |= (1<<15); 
	GPIOA_ODR |= (1<<4);  
	
	while(j){
		
		B_LED_LIGHT();
		Delay_ms(1000000);

		C_LED_LIGHT();
		Delay_ms(1000000);

		A_LED_LIGHT();
		Delay_ms(1000000);
	}
	
}


之后添加驱动文件,两个目标文件都在(你keil安装的文件夹)Keil-v5里面,Keil_v5->ARM->Flash->_Template->Test

在这里插入图片描述

在这里插入图片描述

将上图两个文件拷贝到项目文件LED里面

在这里插入图片描述

右击文件夹,选择Add Existing Files to Group Source Group 1

在这里插入图片描述

将两个文件都Add一遍,没有这两个文件的话记得把文件类型选成All files。

在这里插入图片描述

4.编译

在这里插入图片描述

编译之后会生成hex文件在项目文件下面的Objects文件夹里面

5.线路连接

对于USB转TTL模块和stm32f103c8t6连接

在这里插入图片描述

在这里插入图片描述

6.烧录

将核心板上的booto0置1,booto1置0,然后将usb连接到电脑上,然后打开mcuisp程序

在这里插入图片描述

确保串口连接上,然后将刚刚生成的hex文件选上

在这里插入图片描述

然后点击开始编程,成功后断电并将booto0置0,重新供电后就行了。

运行结果:

在这里插入图片描述

四、总结

1、学习和理解STM32F103系列芯片的地址映射和寄存器映射原理
2、了解GPIO端口的初始化设置三步骤(时钟配置、输入输出模式设置、最大速率设置)

3、学习和理解了如何用STM32CubeMX完成初始化,并在keil里完成编写。

五、参考

https://blog.csdn.net/weixin_47554309/article/details/120810913

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值