目录

  • 前言
  • 一、基于跨平台多类型代码编辑器VScode
    • 1.VScode的安装
    • 2.Ubuntu中用vscode编译调试C\C++
  • 二、Proteus仿真——STM32流水灯
    • 1.创建工程
    • 2.配置实验所需元件
    • 3.进入keil 5中生成hex文件
    • 4.STM32的配置
    • 5.实验结果
  • 三、Altium Designer的使用
    • 1.创建工程
    • 2.绘制原理图
      • 1) 添加库文件
      • 2) 绘制原理图
      • 3) 编译原理图
  • 总结
  • 附录
    • Altium Designer常用快捷键

前言

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

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

1.VScode的安装

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

    使用wget 下载地址 进行下载

  2. 安装:dpkg -i 安装包

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

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

  • deb安装出现依赖问题可以执行apt --fix-broken install ,用来自动修复安装出现broken的package
  • 重新sudo dpkg -i 安装包重新安装

2.Ubuntu中用vscode编译调试C\C++

  • 安装vscode的C\C++插件

在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会无法设置断点。

  1. 编译调试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<ms;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<<i);  delay_ms(99000);GPIOC->BSRR=(1<<i);}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) 添加库文件

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

2) 绘制原理图

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

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

要注意的是,如果你还要进行 PCB 设计,你选的器件就必须要有相应的 Footprint封装。
如果你还要进行功能仿真,你选的器件就必须要有相应的 Simulation 模型文件。
如果你还要进行信号完整性分析,你选的器件就必须要有相应的 Signal integrity 模型文件。

3) 编译原理图

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

示例原理图如下:

总结

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

附录

Altium Designer常用快捷键

命令 快捷键
测距离 Ctrl+M
取消 Shift+C
高亮显示 Ctrl+单击
切换单位 Q
布线 Ctrl+W
铺铜 P
重新铺铜 T
显示不同图层 Shift+S
布线拐角切换 Ctrl+Shift+空格

嵌入式学习⑤——STM32嵌入式应用系统设计相关推荐

  1. STM32嵌入式应用系统设计

    一. 可视化的代码跟踪调试."人靠衣装马靠鞍,狗配铃铛跑的欢".在前次作业中命令行工具gdb调试基础上,练习利用各种可视化调试前端软件(后端依然依赖gcc.gdb)进行程序代码的跟 ...

  2. 蓝桥杯嵌入式学习STM32之外部中断EXTI详解

    先说点题外话. !是取逻辑反的意思, ~是按位取反的意思 !0x01=0: ~0x01=1111 1110; 进入正题 基本概念 STM32的每个IO都可以作为外部中断输入. STM32的中断控制器支 ...

  3. 嵌入式学习——stm32(2.2)中断实验

    在上一篇说到了配置外部中断需要依次配置GPIO->AFIO->EXTI->NVIC,现在我们以按键通过外部中断控制灯的亮做例子. 目录 1.GPIO的配置 2.AFIO的配置 3.E ...

  4. 嵌入式学习——stm32(3.1)定时器基础

    目录 1.定时器简介: 2.时基单元: 3.定时器资源: 3.1:基本定时器 3.2:通用定时器 4.总结: 1.定时器简介: 从字面来看,定时器就是用来计时的机器, 可以通过计时来触发中断或者事件. ...

  5. 嵌入式学习——stm32(1.2)GPIO应用

    1.GPIO的初始化: 逻辑: 1.使能时钟 2.引用结构体 3.配置结构体 4.调用库函数进行初始化 时钟使能: RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO ...

  6. 知乎嵌入式大杂烩:学习STM32的一点经验分享

    前言 前两天在群里看到群友们在讨论学习STM32的话题,并且今天也有一位机械专业的准研究生也问了STM32的入门问题.正好我也有一点经验,所以试着分享一下这个话题.我也不是什么大神,只是一名普通的工程 ...

  7. 嵌入式学习之STM32实现OLED

    嵌入式学习之STM32实现OLED 一.实验要求 二.SPI介绍 三.OLED介绍 四.实验过程 1.代码编写: 实验结果演示: 一.实验要求 理解OLED屏显和汉字点阵编码原理,使用STM32F10 ...

  8. STM32 嵌入式学习入门(4)——PWM原理

    STM32 嵌入式学习入门(4)--PWM原理 本文先对STM32F103的通用定时器作一简单介绍,然后详细介绍通用定时器的一个应用--输出PWM波形的原理.整个文章以介绍"怎么用" ...

  9. 嵌入式学习笔记——STM32的USART通信概述

    文章目录 前言 常用通信协议分类及其特征介绍 通信协议 通信协议分类 1.同步异步通信 2.全双工/半双工/单工 3.现场总线/板级总线 4. 串行/并行通信 5. 有线通信.无线通信 STM32通信 ...

最新文章

  1. vue 上传图片视频组件,可拍照选择照片,解决苹果手机拍照旋转问题
  2. LightOJ 1088 - Points in Segments 二分
  3. java8入门 错误:找不到或者无法加载主类
  4. JSP中文乱码问题终极解决方案
  5. mysql中的参数如何调试_mysql 查询优化 ~ 查询参数调节
  6. MFC中小笔记(四)
  7. Redis持久化的几种方式——RDB深入解析
  8. 简约好看的响应式app下载页面源码
  9. 消费者启动,允许期间报task supervisor timed out 异常,解决
  10. 2G到5G系统的横向比较(1)多址方式与调制方式
  11. TI软件生态及代码讲解——CCS宏定义使用方法
  12. 2022美团CTF个人决赛WP
  13. windows server添加角色
  14. Google maps及51ditu的图片切割及存储方法2
  15. ImageWarping--反距离加权插值(IDW)方法实现及报告
  16. python超声成像仿真_超声合成孔径成像
  17. Redis学习2之redis-benchmark使用方法总结
  18. 不要浪费那少得可怜的注意力(2)
  19. VB基础版版务处理_20050410
  20. 网络市场调研的步骤与方法

热门文章

  1. win7计算机网络机组用户名,win7连接局域网时的用户名及网络密码是什么?
  2. jQuery.filer文件上传插件简单使用
  3. 计算机碎片整理,如何对计算机进行碎片整理
  4. 什么是多尺度密集网络 - MSDNet ?
  5. conv1d(): argument ‘padding‘ (position 5) must be tuple of ints, not str 这个错误是怎么回事呀?请各位帮忙看看,万分感谢
  6. deepin系统怎么分区?deepin系统分区方法介绍
  7. MPLS之LDP协议
  8. 计算机桌面整理,电脑桌面太乱了怎么整理?
  9. css规则定义的分类,CSS规则定义英汉对照表
  10. 涂涂乐 通过shader实现目标区域正交图片提取,移动端可用