MENU

单片机开发的环境配置与一些问题

• April 11, 2023 • 编程心得阅读设置

最近有幸能接触到单片机开发的相关知识,特写下此文来总结鄙人关于单片机开发的一些浅薄知识。

本文使用的硬件是以 STM32F103C8T6 为主控芯片的开发版。

IMG_20230517_153839.jpg

STM32F103C8T6 开发板

环境准备

一般来说,作为烧录的方案有 Keil uVision5 (以下简称 uVision) 或 具有 ARM 功能的 GDB + Open OCD 可供选择,本文将按照前者进行讲解,若要学习后者,可以参阅 Rust 嵌入式开发的环境配置。本文主要使用 C 作为开发语言,笔者正在学习基于 Rust 的嵌入式开发,欢迎评论区交流与讨论。

不过,鉴于 uVision 相当不先进的开发环境,因此推荐使用 Visual Studio Code + Keil Assistant 的开发环境,仅在调试或构建时使用 uVision

安装与配置各项驱动依赖的步骤,请阅读相应软件文档或指南,此处不再赘述。

创建新项目

创建新项目需要使用 uVision,启动,创建一个新项目: Project -> New uVision Project,选择相对应的芯片组,完成创建。

随后,打开 Manage Project Items 菜单,为 Groups 添加这几项: main, functions, headers, packages。接下来,手动为项目添加相对应的文件夹。由此,项目的结构大概如下所示:

Project
├─ main            // 存放项目主入口
├─ functions       // 存放函数实现
├─ headers         // 存放数据定义与模板
├─ packages        // 存放依赖库
└─ Project.uvprojx // 项目主配置

新建一个文件 main.cmain 下,然后把它添加到最右侧的文件栏。之后,每次添加新的项目文件,都必须以同样的步骤添加,否则 uVision 在编译时会忽略没有引用的文件。

打开 Configure target options,调整这些选项:

  • Target

    • Code Generation

      • ARM Compiler: Use default compiler version 6
  • Output

    • Create HEX file: √
  • C/C++ (AC6)

    • Preprocessor Symbols

      • Define: STM32F10x_MD,USE_STDPERIPH_DRIVER
    • Include Paths: HAL 依赖库路径
  • Debug

    • Use: 选择你的烧录器

保存这些设定,测试成功后,即完成了项目初始化。

开发的思路

要开发单片机,技术手册、原理图和 API 列表都是不可缺少的。

首先,要先对一个问题的解决有大概的实现思路。接着,确定需要的相应组件,阅读原理图,了解其电气特性(如工作时需要什么种类的电平等),并为它在开发板上分配资源(如针脚位置)。分配位置时,必须要根据技术手册中规定的符合要求的针脚来分配。如果一个设备需要 PWM 来进行控制,那么为它分配的针脚必须要是一个有效的 TIM 引脚,才能输出 PWM 波形。撰写程序时,也需要根据依赖包提供的 API 列表中的函数等资源来编写。

开发中遇到的一些问题

不要 在任何中断函数内使用任何阻塞性操作,这会导致程序运行异常。

必须 让一个器件的全部连线都具有同样的电压源,你必须要让电源和数据接线都使用一个来源的输出,否则设备可能工作异常。这是因为这些器件都使用相对电压,即 5V 的定义是相对于大地的零电势定义的,但你的输入可能并不是 5V,这时如果两个方面的输入不等,设备的操作就会出现异常。

Last Modified: September 12, 2023