嵌入式学习⑤——STM32嵌入式应用系统设计

发布者:EnchantedWish最新更新时间:2022-05-10 来源: eefocus关键字:嵌入式学习  STM32  应用系统 手机看文章 扫描二维码
随时随地手机看文章

前言

这次嵌入式学习的主要内容为可视化的代码跟踪调试、简单的hex文件编译并在Proteus上仿真运行、最后使用Altium Designer 进行原理图和PCB图的设计,都是我们学习STM32的工具。


一、基于跨平台多类型代码编辑器VScode

1.VScode的安装

从vscode官网下载最新版本,deb包下载地址:https://code.visualstudio.com/docs?dv=linux64


使用wget 下载地址 进行下载


安装:dpkg -i 安装包


安装成功后,执行code命令打开sacccaas界面

安装过程中由于安装包依赖关系而报错,解决方案如下:


deb安装出现依赖问题可以执行apt --fix-broken install ,用来自动修复安装出现broken的package

重新sudo dpkg -i 安装包重新安装

2.Ubuntu中用vscode编译调试CC++

安装vscode的CC++插件

在vscode中安装C++的插件,按ctrl+p调出命令行,在上面输入ext install cpptools或在也可以只输入ext install然后按空格

配置launch.json和task.json这两个文件

我们在安装好了插件之后,就可以在VScode打开源码文件,并进行调试


首先进行launch.json的调试

注意: VScode要调试的话只能打开包含源码文件的文件夹,不能打开单个文件调试


删除program项前面的部分,只留下"program":"${workspaceRoot}/a.out"花括号里面的workspaceFolder,就是你打开调试的文件夹的目录,也叫做工作目录。其他的就不需要修改了。


配置task.json来进行编译的配置

按ctrl+p打开命令面板,然后输入>task后选择配置任务运行程序

我们只需要把这几项改成


{

    "version": "0.1.0",

    "command": "g++",

    "isShellCommand": true,

    "args": ["-g","${workspaceRoot}/你的源码文件名.cpp"],

    "showOutput": "always"

}


其实真正修改的也就只有command项和args项,command就是调用的控制台命令(就是我们平常用控制台编译时输入的命令),然后args就是命令行参数了,-g参数是必须的,否则到时候没有调试信息,vscode会无法设置断点。


编译调试C++程序

可以看见编译成功输出Hello World!


在这里插入图片描述

二、Proteus仿真——STM32流水灯

1.创建工程

1.点击创建新工程,输入工程名、安装路径。

2.选择从选中的模板中创建原理图(DEFAULT)

3.选择不创建PCB布版设计

4.选择创建固件项目,其中:系列选择Cortex-M3,Controller选择STM32F103R6,点击下一步,然后创建成功


2.配置实验所需元件

1.创建项目完成后就如下图所示,显示出自己所选的型号,STM32F103R6,系统并以配置好电源,连接电路如下,我们选用C0-C7端口,总共8个,如下图所示:

3.进入keil 5中生成hex文件

2.程序代码如下(程序实现要求:8个led灯依次闪烁,然后8个灯同时闪烁8次,依次重复)


/*main.c*/


#include "stm32f10x.h"


GPIO_InitTypeDef GPIO_InitStructure;

void delay_ms(uint32_t ms)

{

uint32_t i_cnt,j_cnt;

for(i_cnt=0;i_cnt<3000;i_cnt++);

for(j_cnt=0;j_cnt

}

uint32_t i;

int main(void)

{

  

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOC, &GPIO_InitStructure);


GPIOC->BSRR=0xff;

while (1)

{

  for(i=0;i<8;i++)

  {

delay_ms(99000);

GPIOC->BRR=(1<   

delay_ms(99000);

GPIOC->BSRR=(1<   }

  for(i=0;i<8;i++)

  {

  delay_ms(99000);

  GPIOC->BRR=0x000000ff;

  

  delay_ms(99000);

  GPIOC->BSRR=0x000000ff;

  

  }


}

}

4.STM32的配置

1.双击stm32f103r6芯片,然后进入Program File 选择刚才生成的hex文件,并配置Crystal Frequency改成8M(设置晶振为8M)

5.实验结果

GIF演示如下:

三、Altium Designer的使用

1.创建工程

在 DXP 主页面下

用鼠标左键点击 文件新的工程PCB 工程,左边的工程 资源管理器中就出现了一个名为 PCB_Project1.PrjPCB 的 PCB 工程,

现在可以左键点击 文件保存工程 来改变项目的保存路径和项目名称。

在项目名称上右键点击,在引处的菜单中选择添加新的工程Schematic,这样,在当前的工程当中添加了一个新的原理图文件 Sheet.schDoc, 原理图文件上右键点击,在引处的菜单中选 择 Save as 来改变原理图名称和保存路径。

到这一步,我们已经在一个 PCB 工程中添加了一张空白的原理图了。


2.绘制原理图

1) 添加库文件

在原理图的下方偏右的边框上,左键点击 SystemLibraries,打开库文件,在库文件的面板里左键点击 Libraries 可以对当前使用的库文件进行添加,移出和排序。

在这里插入图片描述

2) 绘制原理图

接下来, 要从元器件库中拖出我们需要的元器件, 用线把它们连起来, 完成原理图设计。


从元器件库选中需要的元器件,拖出我们需要的元器件,左键点击 PlaceBus 和 PlaecWire ,用线或总线把它们连起来,并且给所有的元器件加上相应的标号( Designator) , 保存完成原理图设计。


要注意的是,如果你还要进行 PCB 设计,你选的器件就必须要有相应的 Footprint封装。

如果你还要进行功能仿真,你选的器件就必须要有相应的 Simulation 模型文件。

如果你还要进行信号完整性分析,你选的器件就必须要有相应的 Signal integrity 模型文件。

在这里插入图片描述

3) 编译原理图

完成原理图设计后,左键点击原理图名称,在引出的菜单中左键点击 Compile Document xxx.SCHDOC ,(xxx 是用户自己定义的文件名),对这个原理图文件进行编译,如果有错误信息就会自动启动消息窗口( Message),来提示用户有什么样的错误。经检查没有错误后,保存原理图。


示例原理图如下:

在这里插入图片描述

总结

通过这次练习,我对STM32的认识又进了一步。STM32在C51的基础上进行了完善,学习过C51的朋友们在接触STM32时可能会感到容易上手。有条件的朋友们可以买一块STM32板,写一些简单的hex文件(如流水灯)进行烧录,观察学习。对嵌入式系统也能有一个更清楚的认识。


附录

Altium Designer常用快捷键

image.png

关键字:嵌入式学习  STM32  应用系统 引用地址:嵌入式学习⑤——STM32嵌入式应用系统设计

上一篇:STM32的USART窗口通讯程序
下一篇:Proteus仿真实验之STM32流水灯

推荐阅读最新更新时间:2024-11-05 15:55

STM32 GPIO 配置之ODR, BSRR, BRR 详解
用stm32 的配置GPIO 来控制LED 显示状态,可用ODR,BSRR,BRR 直接来控制引脚输出状态. ODR寄存器可读可写:既能控制管脚为高电平,也能控制管脚为低电平。 管脚对于位写1 gpio 管脚为高电平,写 0 为低电平 BSRR 只写寄存器: 既能控制管脚为高电平,也能控制管脚为低电平。 对寄存器高 16bit 写1 对应管脚为低电平,对寄存器低16bit写1对应管脚为高电平。写 0 ,无动作 BRR 只写寄存器:只能改变管脚状态为低电平,对寄存器 管脚对于位写 1 相应管脚会为低电平。写 0 无动作。 刚开始或许你跟我一样有以下疑惑: 1.既然ODR 能控制管脚高低电平为什么还需要BSRR和SRR寄存器? 2.既
[单片机]
<font color='red'>STM32</font> GPIO 配置之ODR, BSRR, BRR 详解
STM32 易阅读的代码风格
命名方式 变量 全局变量(驼峰命名法) USART_RxCounter、ColorValue、ADC_Value 局部变量(下划线命名法) usart_rx_counter、color_value、adc_value 函数 所有函数(驼峰命名) USART_Init(); HardwareInit(); CheckValue(); 代码风格 基本语句风格 /*if语句---(外层if语句)*/ if (USART_Falg) { /*if语句---(内层if语句)*/ if ('A' == tmp){ tmp--; sum++; } else { tmp++; sum--;
[单片机]
关于调试stm32和stm8(51单片机)的i2c和spi协议的之间的区别
在调试STM32的i2c和io口模拟spi协议时发现时序是很关键的。stm32在72M运行下可以实现i2c或者spi协议,但并不代表把相同的代码移植到51单片机上就会成功的跑起来,因为51单片机的速读最块8M,所以在时序上会产生很多大的区别。 经过测试,在stm32上的spi协议时钟线可达到20Khz,移植到51后,频率会降到 10hz。可是尽管把延时调小或者去掉还是无济于事,此时就要加几句把钟线置高置低的语句了 以便增大的速度,后来成功后,测试时钟线的确达到了10Khz左右。 先贴上部分代码 unsigned char ReadRawRC(unsigned char Address) { unsigned char
[单片机]
单片机应用系统的问与答
为什么必须考虑单片机的选型问题? 答:单片机的的选型是一件重要而费心的事情,如果单片机型号选择得合适,单片机应用系统就会得经济,工作可靠;如果选择得不合适,就会造成经济浪费,影响单片机应用系统的正常运行,甚至根本就达不到预先设计的功能。 单片机选型不当时会带来什么危害? 答:对于一个已经设计好的单片机应用系统来说,它的技术要求和系统功能都应当十分明确.如果选择功能过于少的单片机,这个单片机应用系统就无法完成控制任务;但是如果选择的单片机功能过于强大,这不但没有必要,还会造成资源浪费,不降性能价格比。 单片机正确选型会带来什么益处? 答:只要掌握和运用单片机正确选型的原则,就可以选择出最能适用于应用系统的单片
[单片机]
stm32.cube(九)——HAL.DMA
一、前言 DMA会在不同的寄存器/ram/存储设备之间建立通道,自动传输数据,以达到解放CPU的目的。 比如你想用DAC模块去输出一段特定的波形,就要让CPU将预设的数值不断写入DAC的寄存器。这时CPU被DAC任务长期占用,系统处理其他任务和响应其他事件的能力被大幅降低。 在实际应用里,经常有一些繁重的读写操作。这些操作不需要经过计算,却依然占用了大量的CPU资源,遇到这种情况就要考虑使用DMA了。 我开发板上的stm芯片上共有7个dma通道,它可以建立7个DMA连接。但是DMA控制器只有一个,所以同时只能有一个DMA连接被相应。 二、DMA的初始化 针对每一个DMA频道,都要初始化它的控制寄存器,来看一下DMA的init结构
[单片机]
关于STM32 NVIC配置的解释
大部分学习用的开发板在配置各个外设的中断优先级时,习惯在每个外设的初始化文件里都进行NVIC group配置,例如在ADC和Usart都有NVIC的配置如下: ADC中: void ADC_NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel =ADC1_2_IRQn; //开启ADC_Channel8中断 NVIC_InitStructure.NVIC_IRQChannelPree
[单片机]
STM32定时器中断设置方法
今天调试了STM32的定时器功能,STM32定时器比较多,但调试都是一样的,寄存器都是一一对应的。就拿TIM2举例说明。在网上搜了好多关于定时器的设置,但大多数都是一个版本,而且都是针对库函数操作的,让人看起来一头雾水,对于初学者很是不利(我也是初学者)。下面我将自己的定时器设置过程一一记录下来,以供大家参考,我们共同学习 首先定义定时器头文件,也就是定义寄存器以供操作: //************************************************************************* // // TIM2-Register // //***********************
[单片机]
STM32的SPI接口
  STM32的SPI接口支持SPI协议和I2S音频协议,默认为SPI,可通过软件切换为I2S。   SPI接口:   MISO 主设备输入/从设备输出   MOSI 主设备输出/从设备输入   SCK 串口时钟   NSS 从设备选择   初始化例程如下: void SPI_Init(void) {   SPI_InitTypeDef SPI_InitStructure;   GPIO_InitTypeDef GPIO_InitStructure;   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE );
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved