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

x33g5p2x  于2022-07-14 转载在 其他  
字(3.7k)|赞(0)|评价(0)|浏览(538)

嵌入式的概念和这篇文章的内容都在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联合仿真

相关文章