MDK 开发环境与 Proteus 仿真软件,实验一。

本博客介绍了如何使用Proteus仿真软件和MDK开发环境进行STM32单片机的LED实验。详细步骤包括新建工程、制作电路、解决编译问题,并提供了bsp_led.h、bsp_led.c和main.c的代码示例,实现了8个LED灯按顺序亮灭的效果。
摘要由CSDN通过智能技术生成

Proteus 仿真软件

安装请自行到网上寻找资源b站友情链接。

我这里使用的是已经汉化过的,可能会出现bug建议使用英文原版。

并且再提及一下,千万不要把Proteus安装在有含有中文路径的文件夹下!!!

新建工程

主页左上角点击新建工程。
请添加图片描述

输入项目名称,
输入路径。千万不要使用带有中文的路径,不然会在后面无法进行
选择新工程(new project)。
然后下一步(next)。

在这里插入图片描述

新建工程向导。
选择从选中的模板创建原理图。
可选择DEFAULT,或者不选也行。
下一步(next)。

在这里插入图片描述

选择不创建新的PCB布版设计。
下一步(next)。

在这里插入图片描述

到了很麻烦的地方了。
接下来应选择创建固件项目,然后选择你需要的东西,**但是,**因为我用了带有中文的路径。所以现在是无法选择是灰色的。
所以这里我退出了Proteus然后将Proteus删除并重新安装Proteus(真的很麻烦,所以千万切记)。

在这里插入图片描述

再重复如上步骤。

你就能看到可以选择的项目了,接下来选择你需要的组件。
这里我使用的是Cortex-M3的内核,STM32F103R6的控制器,编译器在右方选择 Keil for 8051Keil for ARM ,这里需要你先下载Keil uVision5并安装 C51ARM ,详细的安装教程放在链接里➡友情链接。

然后选择检查全部,等它显示下面的样式就说明成功了。
点击确定。

在这里插入图片描述

下一步。

在这里插入图片描述

完成了。
你就会看见如下。

在这里插入图片描述

制作电路

(1) 点击图中所示的“P”,则出现对话框“选择元器件(Pick Devices)”,可以选择相应的元器件后点
击“OK”,比如:可以在“关键词(Keywords)”文本框中输入“LED”,在中间出现很多器件,选择相应器件。

在这里插入图片描述

LED示例。

在这里插入图片描述

RES(电阻)示例。

在这里插入图片描述

(2)将相应元器件放完之后,联系,组成实验系统。

在这里插入图片描述

在搭建完电路后,点击左下角三角形符号

在这里插入图片描述

开始编译。
这里我出现了一个bug:

在这里插入图片描述

解决办法在参考博客里。

后来再一次运行时仍然出现了这个错误,在研究了proteus的使用后,我意思到自己并没有导入.hex文件,自然就无法编译。

此处是操作步骤:

双击U1(即芯片)

在这里插入图片描述

将我们在keil5中生成的.hex文件放进程序文件(Program File)中。
然后选择晶振的频率为8M。

这时候我们再重新编译,

在这里插入图片描述

成功了。
LED灯如我们程序中所写的那样,正以50ms的频率亮灭。

实验

接下来我们实现如下要求:

画出 8 个 LED,实现由上到下 LED 依次点亮与熄灭,延时时间为50ms。

按如下电路图接线(此处我采用了三种不同颜色的LED灯,不必和演示电路图完全一致,可自行发挥。)

在这里插入图片描述

接下来我们在KEIL5里编写bsp_led.h文件。

代码如下:

bsp_led.h

#ifndef __BSP_LED_H
#define	__BSP_LED_H

#include "stm32f10x.h"

/// LED硬件配置
#define LED_NUM                         8                                       ///< 设置LED的数量, 该驱动最多允许16个LED灯
#define LED_LEVEL                       0                                       ///< 0, 低电平点亮LED. 1, 高电平点亮LED

#define LED0_PORT    	GPIOC			            /* GPIO端口 */
#define LED0_CLK 	    RCC_APB2Periph_GPIOC		/* GPIO端口时钟 */
#define LED0_PIN		  GPIO_Pin_0			        /* 连接到SCL时钟线的GPIO */

#define LED1_PORT    	GPIOC			            /* GPIO端口 */
#define LED1_CLK 	    RCC_APB2Periph_GPIOC		/* GPIO端口时钟 */
#define LED1_PIN		  GPIO_Pin_1			        /* 连接到SCL时钟线的GPIO */

#define LED2_PORT    	GPIOC			            /* GPIO端口 */
#define LED2_CLK 	    RCC_APB2Periph_GPIOC		/* GPIO端口时钟 */
#define LED2_PIN		  GPIO_Pin_2			        /* 连接到SCL时钟线的GPIO */

#define LED3_PORT    	GPIOC			            /* GPIO端口 */
#define LED3_CLK 	    RCC_APB2Periph_GPIOC		/* GPIO端口时钟 */
#define LED3_PIN		  GPIO_Pin_3			        /* 连接到SCL时钟线的GPIO */

#define LED4_PORT    	GPIOC			            /* GPIO端口 */
#define LED4_CLK 	    RCC_APB2Periph_GPIOC		/* GPIO端口时钟 */
#define LED4_PIN		  GPIO_Pin_4			        /* 连接到SCL时钟线的GPIO */

#define LED5_PORT    	GPIOC			            /* GPIO端口 */
#define LED5_CLK 	    RCC_APB2Periph_GPIOC		/* GPIO端口时钟 */
#define LED5_PIN		  GPIO_Pin_5			        /* 连接到SCL时钟线的GPIO */

#define LED6_PORT    	GPIOC			            /* GPIO端口 */
#define LED6_CLK 	    RCC_APB2Periph_GPIOC		/* GPIO端口时钟 */
#define LED6_PIN		  GPIO_Pin_6			        /* 连接到SCL时钟线的GPIO */

#define LED7_PORT    	GPIOC			            /* GPIO端口 */
#define LED7_CLK 	    RCC_APB2Periph_GPIOC		/* GPIO端口时钟 */
#define LED7_PIN		  GPIO_Pin_7			        /* 连接到SCL时钟线的GPIO */


typedef enum
{
   
    LED1 = 0,
	LED2 = 1,
	LED3 = 2,
	LED4 = 3,
	LED5 = 4,
	LED6 = 5,
	LED7 = 6,
	LED8 = 7,
	
} led_name_t;

void led_init_all(void);                                                    // 初始化所有的LED
void led_init(led_name_t led_name);                                         // 初始化指定的LED
void led_on(led_name_t led_name);                                           // LED打开
void led_off(led_name_t led_name);                                          // LED关闭
void led_toggle(led_name_t led_name);                                       // LED翻转
uint8_t led_get_status(led_name_t led_name);                                // 读取当前LED状态

#endif

bsp_led.c文件

#include "bsp_led.h"

/// LED参数类型定义
typedef struct
{
   
    GPIO_TypeDef*  PORT;                                                        ///< LED的PORT口
    const uint32_t CLK;                                                         ///< LED的时钟模块
    const uint16_t PIN;                                                         ///< LED的PIN口     
} led_para_t;

/// LED参数映射表
static led_para_t led_para[LED_NUM] 
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
仿真软件与应用实践1 MATLAB基础实验报告(代码总结心得)一、实验目的和要求: 1、掌握数组与矩阵的创建、矩阵运算与数组运算、基本元素群运算和向量与矩阵的特殊处理; 2、掌握二维图形、三维曲线和曲面图形的绘制以及标注; 二、实验内容: 1、利用“:”操作符和 linspace 函数生成数组 a=[0,6,12,18,24,30,36,42],并将数组 a 分别转化为 4*2 和 2*4 的矩阵。 2、在MATLAB中输入矩阵A=[■(3&6&8&1@-5&7&22&17@6&9&16&-12@15&13&-21&0)],并使用MATLAB回答以下问题: (1)创建一个有A中第2列到第4列所有元素组成的4*3数组B; (2)创建一个有A中第3行到第4行所有元素组成的2*4数组C; (3)创建一个有A中前两行和后三列所有元素组成的2*3数组D; (4)根据A利用单下标方法和双下标方法分别创建向量a=[-5 6 15],b=[6 8 1],并利用向量a和b生成矩阵E=[■(-5&6@6&8@15&1)];并利用“[]”删除矩阵A的第二行和第三列。 3、已知a=[■(1&3&4@5&12&44@7&8&27)],b=[■(-7&8&4@12&24&38@68&-5&3)],c=[1,0,8,3,6,2, 4,23,46,6]; (1)求a+b,a*b,a.*b,a/b,a./b,a^2,a.^2的结果,并观察分析运算结果; (2)求c中所有元素的平均值、最大值、中值,并将c中元素按从小到大顺序排列; (3)解释b(2:3,[1,3])的含义,并将生成的数组赋值给d。 4、已知A=[■(7&2&1&-2@9&15&3&-2@-2&-2&11&5@1&3&2&13)],用MATLAB求矩阵A的秩(rank)、行列式(determinant)、逆(inverse)、特征值及特征向量(eigenvalue and eigenvector)。 5、用MATLAB求方程组[■(7&2&1&-2@9&15&3&-2@-2&-2&11&3@1&3&2&13)]*[■(x_1@x_2@x_3@x_4 )]=[■(4@7@-1@0)]的解。 6、用不同线型和颜色在同一坐标内绘制曲线y=2e-0.5xsin(2πx)及其包络线,并为图形添加必要的图形标注。 7、在一个图形窗口中以子图形式同时绘制正弦、余弦、正切、余切曲线,并为图形添加必要的图形标注。 8、在xy平面内选择区域[-8,8]*[-8,8],绘制函数z=(sin√(x^2+y^2 ))/√(x^2+y^2 )的三种三维曲面图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值