STM32
STM32学习笔记、常见BUG、案例分析等
BUG从入门到精通
业精于勤,荒于嬉;行成于思,毁于随。
展开
-
cubemx生成rtt-nano+usb的问题
cubemx配置rtt系统和usb,出现死机问题,调试发现,cubemx使用的usb驱动中有很多调用HAL_Delay()函数的地方,而cubemx配置的工程中默认是使用systick作为延时定时器,当引入操作系统后,systick被也被操作系统作为系统时钟占用。解决办法:配置cubemx时使用其他定时器作为延时定时器。或者完全使用系统的延时函数代替HAL_Delay()函数。此外应当注意,HAL_Delay()函数是死等的,完成外设初始化后,在主线程的循环中不要在使用该函数。...原创 2021-04-16 14:36:39 · 624 阅读 · 0 评论 -
【STM32】条件编译不起作用是什么原因
在工程中定义了几个条件编译,用来适应不同的硬件设备,但是好像不起作用似的。这种情况可能是在多个文件中使用了条件编译,但是编译工程的时候又只是编译了部分文件,即使有部分使用了条件编译的文件没有被重新编译。解决办法:1.把所有使用了条件编译的文档全部编译一遍;2.把工程全部编译一遍。...原创 2020-12-18 09:41:33 · 901 阅读 · 0 评论 -
【MCP3208/MCP3204】STM32多通道AD采集,有源码
芯片简介MCP3208/MCP3204是一种片外12位精度的AD采集芯片,前者是8通道,后者是4通道,其他的都一样。找不到该芯片的中文手册的点这里。引脚定义时序结合手册5.0章节的说明看时序图。电平状态稳定时间可以看到,最短稳定时间的最长的为500ns(0.5us),均小于1us,只要在程序中保证引脚的电平稳定时间至少超过1us即可。控制位第一个CS拉低且Din拉高的信号为起始位。紧跟着其实位的是Single/Diff位、以及D0 D1 D2位。起原创 2020-11-04 10:59:31 · 6579 阅读 · 4 评论 -
STM32-快速上手SPI
1 概述基本的部分前文《STM32-SPI》已经介绍过了,这里只记怎么用。1.1 引脚映射STM32F103ZET6的三个SPI的引脚分别为SPI1_SCK PA5(21) SPI1_MISO PA6 (22) SPI1_MOSI PA7 (23) SPI1_NSS PA4(20)SPI2_SCK PB13(34) SPI2_MISO PB14(35) SPI2_MOSI PB15(36) SPI2_NSS PB12(33)SPI3...原创 2020-10-30 14:16:18 · 491 阅读 · 0 评论 -
STM32-SPI
1 SPI概述SPI是高速全双工同步串行通信接口,主要应用在EEPROM,FLASH,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器之间。1.1 接口SPI主要有四根线MOSI、MISO、SCK、CS。MISO:主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据。 MOSI:主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据。 SCK:串口时钟,作为主设备的输出,从设备的输入 CS:片选引脚,一般由主设备控制。1.2 通信.原创 2020-10-30 11:49:45 · 1774 阅读 · 0 评论 -
STM32-SPI的NSS详解
区分开内部NSS和NSS外部引脚的区别,内部NSS的电平状态决定了设备的主从模式,内部NSS状态可以由NSS外部引脚控制,也可以由控制寄存器的SSI位控制。内部NSS决定了主模式还是从模式,它可以通过设置SSM位选择硬件管理或是软件管理,如下图。NSS外部引脚,主要作为输入引脚。如果是硬件管理(SSM=0),则当NSS引脚为低电平的时候,NSS状态为从模式,否则为主模式;如果是软件管理(SSM=1),内部NSS则由SSI位决定,STM设置NSS引脚的软件管理是为了可以将NSS引脚空出来,像.原创 2020-10-30 11:06:59 · 7256 阅读 · 1 评论 -
STM32-DAC生成1Hz三角波【DAC触发方式深入理解】
前文《STM32-一文搞懂DAC》的1.2节对触发方式进行了详细的说明,也简单介绍了三角波的生成原理。本文记如何配置一定频率的三角波以及为什么这么配置。1 概述三角波的数据生成是由一个单独的计数器往复加减生成的,每次触发之后该计数器会加1/减1。在每个周期过峰值之前,每次触发条件之后加1;过峰值之后,每次触发条件之后减1。但是要先想生成三角波必须以固定的周期加减其输出幅度!也就是以固定的周期触发转换!怎么办呢?谁可以让它以固定的周期?哈哈蛤,定时器!通过设定三角波计数器最大值、定时器触发周期,就可以原创 2020-10-28 17:50:42 · 7462 阅读 · 17 评论 -
STM32-快速上手DAC
关于DAC的模块分析在《STM32-一文搞懂DAC》已经记过了,这里只记快速使用。1 概述STM32的DAC模块只存在于大容量产品中,是12位数字输入,电压输出的数字/模拟转换器,2个输出通道,每个通道都有单独的转换器,支持双DAC模式。DAC可以通过引脚输入参考电压VREF+以获得更精确的转换结果。DAC模块在APB1时钟下!2 配置步骤(1)DAC模块时钟使能(在APB1下)、输出IO端口时钟使能(APB2下)。 void RCC_APB1PeriphClockCmd(uint32_原创 2020-10-28 14:36:08 · 1007 阅读 · 0 评论 -
STM32-一文搞懂DAC
所谓DAC,就是数(Digital)模(Analog)转换,将数字信号转换为模拟信号。1.STM32的DAC概述STM32的DAC模块是12位数字输入,电压输出的数字/模拟转换器,2个输出通道,每个通道都有单独的转换器。在双DAC模式下,2个通道可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。DAC可以通过引脚输入参考电压VREF+以获得更精确的转换结果。注意:STM32的DAC模块只存在于大容量产品中(FLASH容量在256K~512K之间的)。1.1主要特性2个D.原创 2020-10-28 12:29:24 · 10692 阅读 · 1 评论 -
STM32-快速上手DMA
关于STM32的DMA的详细介绍见前文,另外可以参考这篇通俗易懂的文章。1.概述DMA传输是内核授权总线给DMA控制器,把数据传输的工作交给DMA控制器来进行管理的一种数据传输方式。关键的参数是需要指定数据源地址、目标地址、传输的数据个数。2. 配置步骤2.1 抽象的配置过程DMA通道x的配置步骤如下:1. 在DMA_CPARx寄存器中设置外设寄存器的地址。发生外设数据传输请求时,这个地址将是数据传输的源或目标。2. 在DMA_CMARx寄存器中设置数据存储器的地址。发生外设数据原创 2020-10-26 17:30:23 · 354 阅读 · 0 评论 -
STM32-一文搞懂DMA
1. DMA简介直接存储器存取(DMA,Direct Memory Access)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,节省CPU资源。DMA传输本质上是一种CPU进行权力下放的方式,将一些本来需要CPU处理的繁琐事务经过交代(配置DMA)之后全权交给DMA控制器处理。DMA 传输对于高效能嵌入式系统算法和网络是很重要的。在实现DMA传输时,是由DMA控制器直接接管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU原创 2020-10-26 16:00:18 · 1596 阅读 · 0 评论 -
STM32-快速上手ADC
STM32的ADC模块的架构分析在这里,这里只怎么用。原创 2020-10-26 10:22:19 · 1497 阅读 · 1 评论 -
STM32-一文搞懂ADC
STM32 拥有 1~3 个 ADC(STM32F101/102 系列只有 1 个 ADC,F103系列至少有两个ADC),这些 ADC 可以独立使用,也可以使用双重模式(提高采样率)。STM32 的12位ADC是一种逐次逼近型模拟数字转换器,它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。ADC的输入时钟不得超过14MH原创 2020-10-24 12:02:14 · 4599 阅读 · 2 评论 -
STM32-电源【ADC供电、VDDA、VSSA、VREF、VBAT等】
了解电源之前,先来简单了解一下各种电源端口的命名VCC:C=circuit表示电路的意思,即接入电路的电压。VDD:D=device表示器件的意思,即器件内部的工作电压。VSS:S=series表示公共连接的意思,通常指电路公共接地端电压。GND:在电路里常被定为电压参考基点。VEE:负电压供电;场效应管的源极(S)VPP:编程/擦除电压。V*与V*A的区别是:数字与模拟的区别数字电路供电VCC模拟电路供电VCCA更多的(点这里)。目录STM32供电方案一览...原创 2020-10-23 11:18:01 · 32283 阅读 · 2 评论 -
STM32-编码器的软件解码
编码器的输出AB两相的波形如下图所示,其原理不赘述。软件解码方案有两种1.查表法有波形可以知道,波形有四种状态组成:A相 0 1 1 0 B相 0 0 1 1 当AB相波形经历00—10—11—01的状态就表示一个正向步进。反之则表示反向步进。读引脚电平的代码就不贴上了,只贴波形处理代码:#define FILTER_MAX 3 // 电平滤波次数//AB电平状态表const unsigned原创 2020-10-20 18:38:59 · 1254 阅读 · 0 评论 -
片内外设、片上外设和片外外设的区别
片内外设就是片上外设,同一种意思不同说法而已。片内外设和片外外设的区别:片内、外设是两个概念,片内指做成芯片的集成电路内部,简称片内,片外同理显而易见;外设是外部设备的简称,是指集成电路芯片外部的设备。集成电路芯片与外部设备的连接一般需要专门的接口电路和总线的连接(包括控制总线路、地址总线和数据总线等)。 由于大规模集成电路的技术发展得很快,现在许多芯片在制造时已经能够将部分接口电路和总线集成到芯片内部。对于这部分电路与传统的接口电路和总线是有区别的,为了加于区别可以称之为片内外设,其含义是在集成电原创 2020-10-10 16:53:30 · 22820 阅读 · 12 评论 -
【STM32】寄存器位的操作方式rw、rc、rc_w0、rc_w1、rc_r、rs、rt_w、t、Res.
read / write (rw) 软件能读写此位。read-only (r) 软件只能读此位。write-only (w) 软件只能写此位,读此位将返回复位值。read/clear (rc_w1) 软件可以读此位,也可以通过写’1’清除此位,写’0’对此位无影响。read / clear (rc_w0) 软件可以读此位,也可以通过写’0’清除此位,写’1’对此位无影响。read / clear by read (rc_r) 软件可以读此位;读此位将自动地清除它为’0’,写’0’对此位无影响。r原创 2020-10-14 10:15:07 · 13128 阅读 · 4 评论 -
STM32-快速上手输入捕获
在前面文章《STM32-一文搞懂通用定时器捕获/比较通道》已经详细介绍了输入STM32的捕获/比较通道,这边文章来写捕获的应用。配置步骤使能定时器(通用定时器在APB1下)和相关IO(APB2下)时钟 void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState原创 2020-10-15 18:59:08 · 386 阅读 · 0 评论 -
STM32-快速上手PWM输出
在前面文章《STM32-一文搞懂通用定时器捕获/比较通道》已经详细介绍了输入STM32的捕获/比较通道,这边文章来写捕获的应用。配置步骤使能定时器(通用定时器在APB1下)和相关IO(APB2下)时钟 void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState原创 2020-10-15 17:57:35 · 414 阅读 · 0 评论 -
STM32-一文搞懂通用定时器捕获/比较通道
捕获和比较捕获什么是捕获所谓捕获就是通过检测捕获通道上的边沿信号。在边沿信号发生跳变(比如上升沿/下降沿)的时候,将当前定时器的值(TIMx_CNT)存放到对应的通道的捕获/比较寄存器(TIMx_CCR)里面,完成一次捕获。捕获的应用STM32支持一下捕获模式:输入捕获模式 PWM输入模式输入捕获模式可以用来测量脉冲宽度或者测量频率。下图是输入捕获测量高电平脉宽的原理,假定定时器工作在向上计数模式,图中 t1~t2 时间,就是需要测量的高电平时间。测量方法如下:首先设置定原创 2020-10-15 16:52:12 · 27448 阅读 · 5 评论 -
STM32-定时器系统原理
STM32的定时器概述STM32F1有TIME1和TIME8 等高级定时器,也有TIME2~TIME5等通用定时器,还有TIME6和TIME7等基本定时器。关于高级定时器、通用定时器、基本定时器的区别:基本定时器:具有最基本的计时功能,与通用和高级定时器的16位自动重装载计数器不同,他的计数器是一个累加计数器!基本定时器独有一个其他定时器没有的DAC的同步电路!通用定时器:能满足大部分使用需求的定时器。高级定时器:高级的骚操作比较多的定时器,但是一般不常用到,用到的时候可以再根据参考手原创 2020-10-14 18:41:40 · 2568 阅读 · 0 评论 -
STM32-一文读懂EXTI外部中断/事件系统
STM32的外部中断系统简介注意这里的外部中断指的是EXTI,是芯片的外部中断,主要是由芯片外部事件触发的中断,不是内核的外部中断!在《STM32-异常与中断》中提到的外部中断均是相对于内核而言的,比如串口中断、定时器中断等等都是(内核的)外部中断。大部分的STM32外部中断/事件控制器由19个产生事件/中断请求的边沿检测器组成,支持 19 个外部中断/事件请求,这19 个外部分别中断为: (互联型[STM32F105和STM32F107])产品有20个)线 0~15:对应外部 IO 口的输入中原创 2020-10-14 13:18:31 · 4552 阅读 · 2 评论 -
STM32-一个例子搞懂EXTI外部中断/事件系统
假设一个商业帝国集团有三家子公司,叫EXTI安保公司、AD转换技术有限公司、INT中断快递有限公司。EXTI安保公司有一个经理和三个员工,分别为:经理:寄存器·李门卫:边沿检测·王业务员:中断业务·杨发言人:脉冲输出·赵边沿中断事件一天,EXTI技术有限公司经理寄存器·李得到集团董事长的指示,要抓一个叫边沿的家伙,把它交给AD转换技术有限公司处理。经理赶紧告诉门卫边沿检测·王:“小王啊,注意点,如果遇到一个叫边沿的时候告诉我一声!”。门卫边沿检测·王高兴地去看门了。原创 2020-10-14 11:47:48 · 541 阅读 · 1 评论 -
STM32-USART串口通信【USART和UART的区别】
介绍了USART和UART的区别、STM32的USART1的寄存器和配置方法以及常见的问题,适合速查!原创 2020-10-13 19:36:57 · 14683 阅读 · 2 评论 -
STM32-NVIC中断嵌套优先级管理器
NVIC简介NVIC(Nested Vectored Interrupt Controller),中断嵌套向量控制器,是 Cortex‐M3 不可分离的一部分,它与 CM3 内核共同完成对中断的响应。在了解NVIC之前最好简单了解一下CM3内核的中断系统,传送。NVIC 共支持 1 至 240 个外部中断输入(通常外部中断写作 IRQn),每个中断有最高256(最低8)级的优先级,具体的中断数和优先级级数由芯片厂商在设计芯片时决定(STM32F1支持60个外部中断,16级优先级)。此外,NVIC 还原创 2020-10-10 20:37:12 · 674 阅读 · 0 评论 -
STM32-异常与中断
在使用单片机的时候我们常用到的中断,但是但是我们常说的中断都是由(内核的)外部事件引起的、正常的紧急事件。而异常与我们所说的中断相似,但也有不同之处。异常(内核中断)和外部中断异常是CPU内部产生的中断,即在CPU执行特定指令的时候出现的非法情况,如除数为0等等,所以不可能在执行指令期间发生异常,只会在执行一条指令后有可能发生,所以也称同步中断。而中断则是一种异步的,它与特定的进程是无关的,又称为异步中断。CM3 内核支持 256 个中断,其中包含了 16 个内核中断(主要用于系统异常)和 2原创 2020-10-10 19:07:19 · 2392 阅读 · 0 评论 -
STM32-PA13、PA14、PA15、PB3、PB4等默认为仿真功能引脚重映射为普通IO
如果对仿真不是比较熟悉,我们可能不小心就在这里郁闷了半天,“玄学,配置的没问题啊,这个引脚(PA14、PA15、PB3、PB4)怎么不能用呢?”这是因为这些引脚默认功能是作为仿真引脚的。如下图(芯片手册截图)如果要使用这些引脚为普通IO,需要重映射为普通IO,比如下边这两行是释放PB3、PB4、PA15引脚。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ原创 2020-09-22 19:13:33 · 2690 阅读 · 0 评论 -
STM32-Keil软件仿真和硬件仿真/在线仿真
本文主要写了以下内容1.keil5的软件仿真配置、仿真方法,常用的逻辑分析仪、Watch Window、堆栈观察窗口、Peripherals窗口等常用的调试工具。2.常见的仿真器协议/接口(JTAG、SWD),常见的仿真器(JLINK、STlink、Ulink)等,以及硬件/在线仿真。原创 2020-09-22 18:42:05 · 41624 阅读 · 5 评论 -
STM32-GPIO的配置和使用
1.寄存器介绍STM32 的每个 IO 端口都有 7 个寄存器来控制。他们分别是:配置模式的 2 个 32 位的端口配置寄存器CRL 和 CRH;2 个 32 位的数据寄存器IDR 和 ODR;1 个 32 位的置位/复位寄存器BSRR;一个 16 位的复位寄存器 BRR;1 个 32 位的锁存寄存器LCKR;这里我们仅介绍常用 的几个寄存器,我们常用的IO 端口寄存器只有 4 个:CRL、CRH、IDR、ODR,即端口配置寄存器和数据寄存器。1.1端口配置寄存器(CRL和CRH)CRL:每个.原创 2020-09-21 10:27:08 · 7759 阅读 · 0 评论 -
STM32-不同芯片的移植
在实际项目中,我们根据项目需求选用最合适的芯片型号,有时会涉及到一个工程代码在不同芯片上的使用,不同型号的芯片如何移植呢?通过本文,您将了解基本的移植过程。同时,由于该方法没有经过不同芯片型号的大量的验证,出于严谨需要,我会根据网友反馈不断更新经过验证该方法的单片机型号,因此希望大家移植成功之后反馈你移植的型号,也欢迎对错误之处指正。原创 2020-09-16 21:18:25 · 5724 阅读 · 5 评论