单片机F103开发大全
文章平均质量分 91
韦东山团队编制
韦东山
深圳百问网科技有限公司技术总监,毕业于中国科学技术大学电子、软件专业双学位,10余年嵌入式一线开发经验, 畅销书<<嵌入式Linux应用开发完全手册>>作者, 擅长ARM/MIPS等架构的Linux底层系统开发, 曾为多家知名培训机构特邀讲师,2011年陆续录制的工程师必看教程------韦东山系列Linux/Android视频,有口皆碑。累计学员10万+,当之无愧成为嵌入式培训领域的佼佼者。
展开
-
STM32通信模拟SPI
21.1 关于 SPI21.1.1 SPI 协议SPI(Serial Peripheral Interface,串行外设接口)是由摩托罗拉(Motorola)在1980前后提出的一种全双工同步串行通信接口,它用于MCU与各种外围设备以串行方式进行通信以交换信息,通信速度最高可达25MHz以上。SPI接口主要应用在EEPROM、FLASH、实时时钟、网络控制器、OLED显示驱动器、AD转换器,数字信号处理器、数字信号解码器等设备之间。SPI通常由四条线组成,一条主设备输出与从设备输入(Master O原创 2021-05-20 10:26:19 · 16778 阅读 · 13 评论 -
STM32通信硬件 I2C
20.1关于 I2CSTM32F103系列的I²C控制器,可作为通信主机或从机,因此有四种工作模式可选择:主机发送模式、主机接收模式、从机发送模式、从机接收模式。传输速度上,支持标准模式(Standard mode,最高速度100kHz)和快速模式(Fast mode,最高速度400kHz)。同时,还支持SMBus2.0(System Management Bus,系统管理总线)和PMBus (Power Management Bus,电源管理总线)。I²C控制器结构如图 20.1.1 所示,可以看作原创 2021-05-19 11:38:28 · 6215 阅读 · 8 评论 -
STM32通信模拟 I2C
19.1 关于I2C19.1.1 I2C 协议I²C(Inter-Integrated Circuit),常读作“I方C”,它是一种多主从架构串行通信总线。在1980年由飞利浦公司设计,用于让主板、嵌入式系统或手机连接低速周边设备。如今在嵌入式领域是非常常见通信协议,常用于MPU/MCU与外部设备连接通信、数据传输。I²C由两条线组成,一条双向串行数据线SDA,一条串行时钟线SCL。每个连接到总线的设备都有一个独立的地址,主机可以通过该地址来访问不同设备。因为I²C协议比较简单,常常用GPIO来模拟I原创 2021-05-17 15:27:17 · 7593 阅读 · 18 评论 -
STM32通信接口RS485
18.1关于 RS485RS485是美国电子工业协会(Electronic Industries Association,EIA)于1983年发布的串行通信接口标准,经通讯工业协会(TIA)修订后命名为TIA/EIA-485-ARS485具有支持多节点(32个节点)、传输距离远(最大1219m)、接收灵敏度高(200mV电压)、连接简单(在构成通信网络时,仅需要一对双绞线作传输线)、能抑制共模干扰(差分传输)、成本低廉等特点,在多站、远距离通信等多种工控环境中获得了广泛应用。RS485比RS232晚出原创 2021-05-14 09:40:21 · 35374 阅读 · 21 评论 -
STM32通信串口RS232
17.1关于 RS232RS232是美国电子工业协会(Electronic Industries Association,EIA)于1962年发布的串行通信接口标准,其中RS为英文“Recomend Standard”的缩写,中文翻译为“推荐标准”,232为标识号。该标准对串行通信的物理接口及逻辑电平都做了规定,其输出的电平称为RS232电平。早期常见于个人计算机上,是计算机通讯接口之一。现如今在个人计算机上已比较少见,但在一些工控设备依旧比较多。最简单的RS232通信由三条数据线组成,即TXD、RX原创 2021-05-13 17:51:07 · 24208 阅读 · 7 评论 -
STM32调试串口
16.1 关于 USART/UART在嵌入式中,很多MCU和外设模块都集成有UART外设。STM32F103有3个通用同步异步收发器(Universal synchronous asynchronous receiver transmitter,USART),2个通用同步异步收发器(Universal asynchronous receiver transmitter,UART)。USART和UART的主要区别在于,USART支持同步通信,该模式有一根时钟线提供时钟。串口在嵌入式中经常使用,一般使用UAR原创 2021-05-11 10:25:32 · 10749 阅读 · 11 评论 -
STM32通信相关介绍
目录串行/并行通信全双工/半双工/单工传输同步/异步通信通信速率串口电平标准串口传输协议常见通信协议串行/并行通信按照数据传输的方式,通信可以分为串行通信和并行通信。串行通信简单的说就是数据依次传输,比如要传输0x11111111,一位一位的发送,需要发送8次。并行通信则是几个数据一起传输,同样是0x11111111,如果8位一起发送,只需要发送1次,如图 15.1.1 所示。由此可见,串行传输占用的通信线更少,成本低,通信速度相对较慢;并行传输占用的通信线多,成本高,通信速度相对更快。但随着对传输原创 2021-05-10 10:54:30 · 3199 阅读 · 15 评论 -
GPIO—蜂鸣器
14.1关于蜂鸣器蜂鸣器是一种常见的电子发声元器件,采用直流电压供电,广泛应用于计算机、打印机、报警器、电子玩具、汽车电子设备等产品中,常见的蜂鸣器可分为有源蜂鸣器和无源蜂鸣器。有源蜂鸣器:内部有震荡源,只要通电即可自动发出固定频率的声音。无源蜂鸣器:内部无震荡源,需要外部脉冲信号驱动发声,声音频率可变。两种蜂鸣器实物如图 14.1.1 所示,从外观上来看两种蜂鸣器形状相似,有源蜂鸣器底部有黑胶密封,无源蜂鸣器底部可看到电路板(图中绿色部分),两种蜂鸣器都标注有正负极。14.2硬件设计通常蜂鸣原创 2021-05-08 09:46:32 · 10937 阅读 · 12 评论 -
GPIO—按键中断
13.1关于 STM32 的 EXTI前面“第10章 基础重点—中断系统”介绍了STM32的中断和中断优先级,知道了所有外设中断都由 NVIC管理,比如USART、ADC、I2C、SPI等。GPIO产生的中断也不例外,但在给NVIC管理之前,还有一个EXTI(External interrupt/event controller,外部中断/事件控制器)先处理一下,如图 13.1.1 所示STM32F103系列的EXTI支持19个外部中断/事件请求(互联型系列的STM32支持20个),每个中断/事件都有原创 2021-05-07 15:24:49 · 7794 阅读 · 7 评论 -
GPIO—按键轮询
12.1关于按键前面控制LED灯是让GPIO输出高低电平,而获取按键则是读取GPIO电平,从而获知用户是否按下按键。按键监测一般有两种:按键扫描和按键中断。按键扫描是间隔很短时间反复查询GPIO状态,从而得知是否有按键动作,这种方式代码简单,但比较耗资源。按键中断而是通过按键产生中断信号,从而实现按键的检测,这种方式需要使用到中断机制,需要对MCU了解深入一点,效果是最好的。本节先介绍按键扫描,理解按键的基本原理,下一章再介绍按键中断,同时了解STM32F103的中断使用方法。按键一般占用一个GPI原创 2021-05-07 11:43:15 · 4095 阅读 · 6 评论 -
STM32中断系统
10.1 Cortex-M3 的中断和优先级正常情况下,微处理器根据代码内容,按顺序执行指令。执行过程中,如果遇到其它紧急的事件需要处理,则先暂停当前任务,执行紧急事件,待紧急事件处理完后,再恢复到刚才暂停的地方继续执行。这个产生的紧急事件就叫做中断或异常,如图 10.1.1 所示。通常,把CPU内部产生的紧急事件叫做异常,比如非法指令(除零)、地址访问越界等;把来自CPU外部的片上外设产生的紧急事件叫做中断,比如GPIO引脚电平变化、定时器溢出等。异常和中断的效果基本一致,都是暂停当前任务,优先执行原创 2021-04-19 15:14:45 · 1822 阅读 · 4 评论 -
STM32时钟系统
关于时钟时钟对于一款芯片非常重要,其作用相当于人的心脏,人只有在心率正常稳定的情况下才能健康生活,同样的,芯片只有工作在合法正常的时钟频率下才能保证程序得到正常的运行。本章就将从时钟树开始分析STM32F103的时钟系统,其中包括内部高速/低速时钟源、外部高速/低速时钟源、PLL(锁相环)和系统滴答定时器。以高屋建瓴的形式让用户对STM32F103的时钟系统有一个整体的认识,并在后续的时钟配置实验中让用户进一步的了解HAL库下的时钟配置流程。首先读者要学会如何读STM32F103系列的时钟树,如图 9原创 2021-04-16 11:49:15 · 7507 阅读 · 8 评论 -
STM32F103GPIO-LED点灯
8.1 关于GPIOGPIO(General-Purpose IO ports,通用输入/输出接口),用于感知外界信号(输入模式)和控制外部设备(输出模式),如图 6.1.1 所示的STM32F103ZET6芯片四周的细引脚就是GPIO。在嵌入式开发中,经常需要用到一些外部功能模块,比如LED、按键、蜂鸣器、温度传感器等,这些外设模块都比较简单,只需要MCU的GPIO与模块连接,控制引脚输出/读取高低电平即可。还有一些外部功能模块,需要多个引脚构成的“协议”进行通信,比如UART、I2C、SPI接口等。原创 2021-04-14 12:00:17 · 8086 阅读 · 4 评论 -
STM32自定义创建工程模板
自定义创建工程模板在前面“C语言使用HAL库开发”章节里,体验了如何使用HAL快速开发。不同于使用汇编和寄存器开发,使用HAL库需要为工程准备许多相关文件,也就是创建HAL库的工程模板。工程模块没有统一的格式,通常是根据多年的开发经验和使用习惯总结出来的,以“5_程序源码\1_创建工程模板”为例,介绍如何一 个工程模板是如何创建的。如图 7.1.1 所示,一个工程包含五个文件夹,一个清理脚本,一个说明文本文件。各文件夹、文件说明如下:Core:存放从SDK文件夹抽取的部分可能会修改的核心文件;原创 2021-04-08 15:34:01 · 2658 阅读 · 6 评论 -
C 语言使用 HAL 库开发
C 语言使用 HAL 库开发ST公司先后推出了两套主要库:标准外设库(Standard Peripherals Library)和HAL库(Hardware Abstraction Layer)。标准外设库是STM32最早发布的固件库,对STM32芯片进行了完整的封装,包含所有外设的性能特征,每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有功能。因为发布比较早,教程比较多,目前仍有不少开发者使用。标准外设库是针对某一系列STM32芯片而设计的,没有可移植性,目前该库已将停止了更新、研发,最近几年发布原创 2021-04-08 15:15:53 · 2880 阅读 · 0 评论 -
C 语言使用标准库开发
前面的两种开发方式,适用于任何一款芯片,但需要仔细阅读《参考手册》找到对应寄存器,然后用指针变量指向寄存器。ST公司为了让用户更快上手开发,产生用户粘性,将外设寄存器提前定义好,准备一些常用接口函数供用户使用,这就是标准库的雏形。下面来感受下使用标准库的简便性。使用标准库通常不需要知道外设寄存器地址,只需要分析《开发板原理图》得知会用到哪一个引脚。本章涉及的代码位于100ASK_STM32F103开发板资料的“5_程序源码\0_单片机开发模式的发展\2_C语 言使用标准库开发\”。首先使用C语言需要原创 2021-04-08 15:10:59 · 1013 阅读 · 0 评论 -
C 语言操作寄存器开发
在使用C语言操作寄存器前,仍需要先分析《开发板原理图》和《参考手册》,从而得知需要操作哪些外设寄存器,假设读者已经了解需要操作哪些外设寄存器。本章涉及的代码位于100ASK_STM32F103开发板资料的“5_程序源码\0_单片机开发模式的发展\2_C语言操作寄存器开发\”。使用C语言之前,需要先设置栈,如代码段 6.3.1 所示,在上电复位后立即设置栈,随后跳入main函数执行。代码段 6.3.1 设置栈(startup_stm32f10x_hd.s); Reset handlerReset_H原创 2021-04-08 15:04:02 · 1649 阅读 · 0 评论 -
单片机使用汇编开发的简单介绍
汇编语言(Assembly Language)是一种用于电子计算机、微处理器、微控制器或其它可编程器件的低级语言。在单片机出现之初,由于性能限制,都是使用汇编进行开发。随着技术的发展,制程工艺的提升,单片机的处理速度越来越快,越来越多的单片机使用C语言开发。如今,一些低端MCU还在使用汇编开发;一些高要求程序优化的场合也会使用汇编;MCU/MPU的启动初始化部分也是汇编。本小结就带领读者感受下如何使用汇编操作开发板LED灯。在编写代码前,本应该分析《开发板原理图》和《参考手册》,从而得知需要操作哪些外设原创 2021-04-07 17:39:23 · 1952 阅读 · 5 评论 -
STM32 结构
从“2.2 ARM与STM32的关系”可知,ARM公司负责设计内核,半导体芯片厂商拿到内核授权后,根据产品需求,添加各类组件,生产芯片售卖。如图 6.1.1 所示,为STM32的组成示意图,其中Cortex-M3内核、调试系统都是ARM公司设计,内部总线、外设、存储、时钟复位等都由ST公司开发。在编程之前,对STM32的总线结构、存储结构、外设寄存器等有个大致了解,有助于理解编程中的一些操作。此外,中断与异常(Nested Vectored Interrupt Controller,NVIC)、时钟复位(原创 2021-04-06 11:07:56 · 13354 阅读 · 8 评论 -
嵌入式 C 语言(下)
条件编译可以使用预处理指令创建条件编译,即可以使用这些指令告诉编译器根据编译时的条件执行或忽略代码块。#ifdef、#else和#endif指令我们用一个示例来看这几个指令:#ifdef HI /* 如果用#define 定义了符号 HI,则执行下面的语句 */#include <stdio.h>#define STR "Hello world"#else /* 如果没有用#define 定义符号 HI,则执行下面的语句 */#include "mychar.h"#defi原创 2021-03-30 15:25:23 · 5855 阅读 · 15 评论 -
嵌入式 C 语言(中)
这里写目录标题volatile 用法struct 用法enum 用法预处理器与预处理指令文件包含#includevolatile 用法volatile原意是“易变的”,在嵌入式环境中用volatile关键字声明的变量,在每次对其值进行引用的时候都会从原始地址取值。由于该值“易变”的特性所以,针对其的任何赋值或者获取值操作都会被执行(而不会被优化)。由于这个特性,所以该关键字在嵌入式编译环境中经常用来消除编译器的优化,可以分为以下三种情景:修饰硬件寄存器;修饰中断服务函数中的非自动变量;在有操作系原创 2021-03-29 10:53:04 · 7905 阅读 · 14 评论 -
嵌入式 C 语言(上)
目录基础知识数据类型const 用法作用域与 static 用法extern 用法基础知识嵌入式C语言和普通C语言在语法上几乎没有差别,其主要差别在于普通C语言的运行环境是OS之上,有很多的标准库函数支撑调用,分配的内存是电脑的内存,其处理器就是电脑的CPU;而在嵌入式环境中,会涉及到底层的硬件,而硬件本身是没有标准库可以调用的,因而就需要开发者使用C语言编程调试硬件,使其可以工作,对于开发某一款芯片,有针对的编译器(或者交叉编译环境),可以分配的内存则是芯片的RAM、Flash,处理器则是芯片自身带的原创 2021-03-24 09:21:09 · 14529 阅读 · 12 评论 -
STM32 最小系统
单片机最小系统是指用最少的电路组成单片机可以工作的系统,通常最小系统包含:电源电路、时钟电路、复位电路、调试/下载电路,对于STM32还需要启动选择电路。电源电路不同的MCU的工作电压可能是不一样的,比如51单片机通常为5V,而STM32单片机通常为3.3V。因此,通常需要查阅该MCU的数据手册才能确定工作电压和规范。打开“2_官方资料”的《1_STM32F103xE数据手册【重要】.pdf》(后简称,《数据手册》),找到“5.1.6Power supply scheme”电源方案小结,可以看到如图.原创 2021-03-23 09:08:15 · 17012 阅读 · 5 评论 -
如何看开发板原理图
如何看开发板原理图以100ASK_STM32F103的原理图为例,介绍如何看原理图,读者只需要掌握几个要点,就能基本理解原理图的标识含义。100ASK_STM32F103原理图在“4_硬件资料”文件夹里,读者打开《100ASK_STM32F103原理图.pdf》(后简称,《原理图》)配合本手册阅读。《原理图》一共有11页,第一页包含整体框图、目录、版本信息;第二页是开发板的核心——STM32F103ZET6的原理图;第三页是单片机最小系统,包含MCU电源、时钟、复位等;第四页是系统电源;从第五页开始,是原创 2021-03-22 09:38:24 · 12847 阅读 · 7 评论 -
STM32F103开发环境的搭建
交叉开发嵌入式系统开发不同于通用PC系统的开发。通用PC系统拥有强劲的处理器、充裕的内存和硬盘,且有鼠标键盘输入,显示屏查看,是理想的开发载体,因此PC程序也就直接在PC上开发。而嵌入式系统往往资源有限,输入显示也受限,不适合作为开发载体,因此嵌入式程序通常不在嵌入式系统中开发。而是将嵌入式程序放在PC上开发,然后将生成的可执行文件放在嵌入式系统运行,这种方式就叫交叉开发。交叉开发通常由三部分组成:宿主机(Host)、目标机(Target)、连接宿主机和目标机的工具(调试/仿真/下载器)。宿主机指用于开原创 2021-03-19 10:24:21 · 6566 阅读 · 9 评论 -
常见处理器MCU、MPU、DSP、FPGA等嵌入式处理器概念
前文中多次出现了MCU、MPU、DSP、FPGA等嵌入式处理器概念,很多初学者可能比较迷惑,下面将对这些概念进行简单介绍。MCU微控制器 (Micro-Controller Unit , MCU) ,俗称单片机。 之所以称之为单片机 (Single Chip Microcomputer),是因为不同于其它处理器,它将CPU、RAM(随机存储器)、ROM(只读存器)、I/O、中断系统、定时器等各种功能外设资源集中到一个芯片上。这个芯片就是一个完整的微型计算机,只需要供电或加上极少的外围电路即可工作。常见原创 2021-03-17 09:46:58 · 16576 阅读 · 12 评论 -
ARM 与 STM32 的关系
ARM 介绍1978年,奥地利籍物理学博士Hermann Hauser,和他朋友,一位英国工程师Chris Curry,共同创建了一 家名为“Cambridge Processor Unit,CPU”的公司,中文字面意思就是“剑桥处理器单元”,主要从事研发 当地电子仪器设备的业务,比如街头游戏机之类的。1979年,在经营逐渐进入正规后,原来的公司名不怎么合适了,那个年代喜欢找个吉祥物作为公司名字, 比如Apple公司。这俩就以橡子为吉祥物,取名为“Acron Computer”,中文字面意思就是“橡果公原创 2021-03-16 09:25:14 · 12286 阅读 · 13 评论 -
嵌入式产品实例分析
实例一:智能台灯该台灯首发价格为399元,月销上万,可以说是一款月流水千万级的产品。相较于传统台灯,主要增加了亮度、色温调节和手机控制,身价也涨了几倍,该智能台灯如图 2.1.1 所示,功能如下:可以根据外部光照情况,自动调整台灯亮度、色温;可以手动调节台灯亮度、色温;一键切换到读写场景模式和阅屏场景模式;支持番茄时钟,每隔25分钟,灯光提醒用户休息;支持手机连接,通过手机或手机语音控制;该智能台灯的底座为控制面板,拆解该底座即可看到内部电路结构,如图 2.1.2 所示。可以看到里面主要有原创 2021-03-15 10:33:04 · 18345 阅读 · 12 评论