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 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 嵌入式基本工具概念和板子认识 -> 正文阅读

[嵌入式]嵌入式基本工具概念和板子认识

嵌入式的概念和这篇文章的内容都在ppt里面:
链接:

关于嵌入式的基本名词如MCU,ARM,树莓派,安卓,以及嵌入式环境见第一个ppt

板子的名称

在这里插入图片描述

工程目录文件

在这里插入图片描述
在这里插入图片描述

标准外设库(人家编好的用)

在这里插入图片描述

标准源码结构图:libraries

在这里插入图片描述

创建工程模板

下载函数包

下载STM32标准库函数文件(https://www.st.com/content/st_com/en.html
在这里插入图片描述
得到STSW-STM32054ACTIVE
STM32F10x standard peripheral library
stmF10系列的标准函数文件

新建文件夹

新建一个stm32f10xTemPro文件夹:
主要有如下几个目录:

  • CORE:用来存放核心文件和启动文件;
  • FWLIB:用来存放库函数源码文件;
  • OBJ:用来存放编译过程文件和hex文件;
  • SYSTEM:用来存放共用代码;
  • USER:用来存放工程文件和主程序main。
  • BSP:用来存放子模块程序文件

在这里插入图片描述

新建工程

打开keil mdk5 ,新建工程,保存到USER里面吧,选择板子为stm32f103R6
然后工程文件就会自动创建了
在这里插入图片描述
在这里插入图片描述

给Group添加文件

在这里插入图片描述

  • 1-汇编编写的启动文件
    startup_stm32f10x_hd.s:设置堆栈指针、设置PC指针、初始化中断向量表、配置系统时钟、对用C库函数_main最终去到C的世界

  • 4-内核相关的
    CMSIS - Cortex 微控制器软件接口标准
    core_cm3.h:实现了内核里面外设的寄存器映射
    core_cm3.c:内核外设的驱动固件库

类似这样把文件添加,添加后是这样的:
在这里插入图片描述

固件库

关于这个固件库:
注意下面内容:

  • 1-汇编编写的启动文件
startup_stm32f10x_hd.s:设置堆栈指针、设置PC指针、初始化中断向量表、
配置系统时钟、对用C库函数_main最终去到C的世界
  • 2-时钟配置文件
system_stm32f10x.c:把外部时钟HSE=8M,经过PLL倍频为72M。
  • 3-外设相关的
stm32f10x.h:实现了内核之外的外设的寄存器映射
xxx:GPIO、USRAT、I2C、SPI、FSMC
stm32f10x_xx.c:外设的驱动函数库文件
stm32f10x_xx.h:存放外设的初始化结构体,
外设初始化结构体成员的参数列表,外设固件库函数的声明
  • 4-内核相关的
CMSIS - Cortex 微控制器软件接口标准
core_cm3.h:实现了内核里面外设的寄存器映射
core_cm3.c:内核外设的驱动固件库

NVIC(嵌套向量中断控制器)、SysTick(系统滴答定时器)
misc.h
misc.c
  • 5-头文件的配置文件
stm32f10x_conf.h:头文件的头文件
//stm32f10x_usart.h
//stm32f10x_i2c.h
//stm32f10x_spi.h
//stm32f10x_adc.h
//stm32f10x_fsmc.h
......
  • 6-专门存放中断服务函数的C文件
stm32f10x_it.c
stm32f10x_it.h
中断服务函数你可以随意放在其他的地方,并不是一定要放在stm32f10x_it.c
#include "stm32f10x.h"   // 相当于51单片机中的  #include <reg51.h>
int main(void)
{
	// 来到这里的时候,系统的时钟已经被配置成72M。
}

STM32固件库文件分析.txt

添加头文件所在目录

在这里插入图片描述
在这里插入图片描述

配置全局宏定义变量

在“C/C++”选项卡的“Define”文本框中输入

  • 小容量的芯片,就输入STM32F10x_LD,USE_STDPERIPH_DRIVER
  • 中容量的芯片,就输入STM32F10x_MD,USE_STDPERIPH_DRIVER;
  • 大容量就是STM32F10x_HD,USE_STDPERIPH_DRIVER

在这里插入图片描述

更改main.c

这里就是咱们学习c和c++时候最主要的代码,控制流程敲代码
这里借鉴一下这位老哥总结的:keil中三种编译程序的区别
keil的左上角就是:

  • Translate(编译): 指translate the currently active file,编译当前修改过的文件,编译速度最快,用于随时检查是否存在因修改导致的编译错误。

  • Build(构建): 指build target files,建立目标文件,编译当前修改过的文件以及需要调用修改过代码的文件,同时链接生成可执行文件(如果工程之前没有生成过可执行文件,则执行rebuild功能),当只修改主函数中内容,就想验证下结果,在下载程序前常用。

  • Rebuild(重建): 指rebuild target files,重建目标文件,对工程中所有文件都重新编译过,生成可执行文件,耗时最长。

在这里插入图片描述

Proteus和keil使用

下面以点亮一个led灯为例说明联合使用

  • 工程目标
    1)使用Stm32的一个IO口点亮一个LED
    2)在Proteus上仿真查看效果

使用是keil MDK版本,要下载板子使用的包
这里借用这篇文章自助搞完:安装stm32芯片包

然后使用上面的模块,下面来试试点灯
这里我就不具体讲了,以后慢慢学固件库
先试试两个软件的联结

keil main:什么都没做
在这里插入图片描述
编译没错误,生成hex文件
这里要注意下,要生成hex文件需要
在这里插入图片描述
模板文件:
https://wwi.lanzoup.com/isZ8A07s7mej

Proteus 8

打开Proteus 8
proteus中不含stm32f103zet6怎么办?
放好器件
在这里插入图片描述
放置电阻
在这里插入图片描述
在这里插入图片描述
电路中的电源需要到终端列表中查询,点击左侧竖排工具箱中的"终端模式"找到power

在这里插入图片描述
连接原理图
在这里插入图片描述

STM32F的NRST是异步复位脚。
当NRST输入低电平的时候,MCU处于复位状态,重设所有的内部寄存器,及片内几十KB的SRAM。
当NRST从低电平变高时,PC指针从0地址开始。但是复位的回时候不会将STM32F片内RTC的寄存器以及后备存储器重置,因为它们是用电池通答过专门的VBAT脚供电。STM32中的NRST有施密特功能。大概在输入电压低于1.9V的时候将芯片复位。

因为编译错误,无法选用这个模型,换用stm32f103R6模型

在这里插入图片描述

出现这种错误
在这里插入图片描述
说明没有配置电源

点击设计design菜单,点击配置供电网Power Rail Configuration
选择名称为GND
在这里插入图片描述

把VDDA和VSSA添加到右边

在这里插入图片描述

又出现这个问题
在这里插入图片描述

参考文章:
proteus仿真出错:VCC and GND nets are connected - check net GND



还有一点要注意,Proteus中电阻的默认阻值是10KΩ,10KΩ的电阻会使LED导通电流很小,LED发光小。
双击电阻或右击电阻在弹出菜单中选中”Edit properties“ 调出电阻属性框,然后将Resjstance数值改小一点,改成200Ω
在这里插入图片描述
在这里插入图片描述

keil mdk5

使用上面的模板文件来建立工程
创建一个BSP文件夹,创建led.h led.c 并添加全局变量
在这里插入图片描述
再创建includes.h , vartypes.h在USER文件夹。
添加代码:

//vartypes.h
#ifndef _VARTYPES_H
#define _VARTYPES_H

typedef unsigned char Int08U;

#endif
//includes.h
#include "vartypes.h"
#include "led.h"
//led.h
#include "vartypes.h"

#ifndef _LED_H
#define _LED_H

void LEDInit(void);
void LED(Int08U);

#endif
//led.c
#include "includes.h"
#include "stm32f10x.h"
void LEDInit(void)
{
	GPIO_InitTypeDef g;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	g.GPIO_Pin=GPIO_Pin_1;
	g.GPIO_Mode=GPIO_Mode_Out_PP;
	g.GPIO_Speed=GPIO_Speed_10MHz;
	GPIO_Init(GPIOA,&g);	
}

void LED(Int08U state)
{
	if(state==0)
	{
		GPIO_SetBits(GPIOA,GPIO_Pin_1);
	}
	else
	{
		GPIO_ResetBits(GPIOA,GPIO_Pin_1);
	}
}
//mian.c
#include "includes.h"
#include "stm32f10x.h"

int main(void)
{
	//初始化led
	LEDInit();
  LED(1);
	
	//LOOP
	while(1)
	{
	}
}

编译生成hex文件
在这里插入图片描述
当然也可以调整项目编译生成的文件位置到OBJ文件夹

在这里插入图片描述
在这里插入图片描述

仿真

hex文件放入芯片在这里插入图片描述

最后灯亮了,这里不知道咋回事,就不演示了

Proteus与keil联合仿真

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:39:38  更:2022-07-17 16:41:35 
 
开发: 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年5日历 -2024/5/18 14:09:47-

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