stm32

stm32之ADC

不打扰是莪最后的温柔 提交于 2020-03-12 14:11:56
  将模拟量转换为数字量的过程称为模式(A/D)转换,完成这一转换的期间成为模数转换器(简称ADC);将数字量转换为模拟量的过程为数模(D/A)转换,完成这一转换的器件称为数模转换器(简称DAC). 模拟信号的采集与处理:   数据采集系统由模拟信号采集、A/D转换、数字信号处理三大部分组成: A/D转换的原理:   A/D转换中通常要完成采样保持和量化编码两方面。所以AD转换是需要转换时间的,一般AD转换的时间在uS级别;(量化编码所需要的时间决定采样保存的时间),如下图: 将采样后得到的样点幅值转换为数字量即为量化,编码的过程。量化编码过程是模/数转换的核心。所谓量化编码,就是以一定的量化单位,把数值上连续的模拟量而时间上的离散的模拟信号通过量化装置转变为树枝上离散的阶跃两的过程。常见的量化编码技术:计数式、双积分转换,逐次逼近式转换,并联式转换; AD转换器的主要参数:   1、分辨率  2、相对精度   3、转换速度; 有16个多路通道。可以把转换分成两组:规则的和注入的。在任意多个通道上以任意顺序进行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。 􀁺 规则组由多达16个转换组成。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。规则组中转换的总数写入ADC_SQR1寄存器的L[3:0]位中。

MDK stm32 AD&串口 软件仿真

让人想犯罪 __ 提交于 2020-03-12 13:47:54
Mdk软件调试,选项 选择use simulator 即软件仿真 下面红框中 一定按照上述文字一字不差填入,右下的两个一定要根据芯片填写妥当。 串口数据思路 借助串口工具将两个串口相连接 使用command将,mdk软件仿真串口输出在电脑串口上 虚拟串口工具====vspd,安装方法附带 https://blog.csdn.net/qq_34202873/article/details/88391265 串口调试助手 附带(自选) step1,利用虚拟串口将两个串口相连接,可以利用串口调试工具进行测试是否将两个串口连接 step2 开始仿真, Step3 命令行将MDK串口输出连接在电脑COM口上 MODE COM4 9600,0,8,1 ASSIGN COM4 <S1IN>S1OUT 第一行命令是改变com口模式, 第二行是将单片机(仿真虚拟软件)串口(Sx)映射(<SxIN>Sxout)到计算机COM口上。 Step4 开始运行,打开串口调试助手选择串口,此时上述被映射串口被占用,无法打开,需要打开的是与之配对的串口。 Step5 AD数据模拟输入 Perfect 来源: CSDN 作者: hanginghang 链接: https://blog.csdn.net/qq_35502383/article/details/104815855

STM32 HAL库的串口使用__HAL_LOCK(huart)

▼魔方 西西 提交于 2020-03-12 04:56:41
在使用HAL库的时候发现同一串口的接收和发送如果同时进行的话会发生问题,因为 如果用调用下面的函数 HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) 进行接收串口数据的时候,有可能 HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout) 也正在进行中,而这两个函数都会对串口资源上锁 __HAL_LOCK(huart); 导致中断接收函数 HAL_StatusTypeDef HAL_UART_Receive_IT 返回hal_busy; 没有正常的执行,所以串口接收中断也没有打开,再也接收不到下一个字节了。 我简单粗爆的把 __HAL_LOCK(huart);注释掉了。 来源: https://www.cnblogs.com/jackweibe/p/7279212.html

STM32寄存器实现led亮灭

北城余情 提交于 2020-03-12 04:53:46
嵌入式基于寄存器点亮一个LED和8个LED 基于寄存器实现1个LED亮灭 目标: 使用STM32F103R6芯片,PB8引脚接LED的阴极,通过C语言程序控制,从PB8引脚输出低电平,使LED点亮。 用Proteus设计第一个SYM32的LED控制电路 新建Proteus工程 添加元器件 放置元器件 调整元器件位置 放置终端 连线 属性设置 电路图 用到的C语言操作 C语言位操作,就是对基本类型变量可以在位级别进行操作。 C语言还支持如下表所示的6种位操作 ![ZZ2Q8YL`JH{3B1C8W5U0P85.png]( http://ww1.sinaimg.cn/large/00852In7gy1gcfcpr2p31j30ai03tglv.jpg ) 代码实现 #include "stm32f10x.h" int main() { RCC->APB2ENR |=1<<3; GPIOB->CRH &=0xfffffff0; GPIOB->CRH |=0x00000003; while(1) { GPIOB->BRR |=0X0080; } } 基于固件库实现1个LED亮灭 STM32固件库 目标、电路图和实现寄存器的相同,下面是实现的代码 实现代码 #include "stm32f10x.h" int main() { GPIO_InitTypeDef strs; RCC

基于STM32之UART串口通信协议(三)接收

蹲街弑〆低调 提交于 2020-03-12 02:00:20
一、前言 1、简介   回顾上一篇 UART发送 当中,已经讲解了如何实现UART的发送操作了,接下来这一篇将会继续讲解如何实现UART的接收操作。 2、UART简介   嵌入式开发中,UART串口通信协议是我们常用的通信协议之一,全称叫做通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)。 3、准备工作   在 UART详解 中已经有了详细的说明,按照里面的说明即可。 注:   建议每次编写好一个相关功能且测试功能成功使用后,保存备份并压缩成一份Demo例程,方便日后有需要的时候可以直接使用。   例如: 二、CubeMx配置及函数说明 说明:   如果有看过我写的 UART发送 的兄弟姐妹们应该会知道,在 UART发送 和 UART详解 中的CubeMx配置都是一样的。   但这一次不同,会在原本配置CubeMx的基础上,添加一些UART的中断配置来实现中断接收操作。 1、CubeMx配置 1)按照 UART详解 配置UART(若配置过,可以继续使用) 2)使能串口中断 3)设置中断优先级(如果没开启其他中断,那就默认即可,直接跳过) 4)代码生成(点击前最好把原本的工程关掉,不然有可能会有问题) 2、函数说明 1)CubeMx生成的UART初始化(在usart.c中) 说明:   会与上一篇 UART发送

LPC1768IAP(详解,有上位机)

被刻印的时光 ゝ 提交于 2020-03-10 04:11:35
  之前说了stm32的iap编程,今天天气真好,顺手就来说说lpc1788的iap编程(没看前面的请查看stm笔记下的内容)   首先是flash的算法,lpc1768并没有寄存器来让我们操作flash,他内置了iap的flash算法,在技术手册的525页有如下说明      其支持的iap命令有这些 这样我们就能够做出相关的flash读写借口呢(具体请查看lpc1768的技术手册) unsigned param_table[5];//传递参数列表 unsigned result_table[5];//返回结果列表 //调用iap命令 void iap_entry(unsigned param_tab[],unsigned result_tab[]) { void (*iap)(unsigned [],unsigned []); iap = (void (*)(unsigned [],unsigned []))IAP_ADDRESS; iap(param_tab,result_tab); }   通过这种手段就能够调用iap命令,我们演示性的看一个命令 //扇区准备好指令 //起始扇区号 结束扇区号 系统时钟 void prepare_sector(unsigned start_sector,unsigned end_sector,unsigned cclk) { param

STM32的GPIO的寄存器配置学习1

对着背影说爱祢 提交于 2020-03-09 16:24:06
本篇文章主要是学习以M3内核的STM32的GPIO的寄存器的配置,为什么要学习寄存器,而不利用库函数呢?我只能说为了让学的知识更加牢固吧!当然,你可以直接去利用库函数,但是如果你能认真读完本篇博客,你会对知识豁然开朗!加油吧! 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 。 可能罗列了这么多的寄存器,小白可能会一头蒙(心想,用的时候再找呗,我想说,那还不如直接记住,对吧,哈哈哈)接下来我会每一个介绍一下,然后会有一个程序说明,仔细看完文章吧! 一、CRL、CRH STM32的每个 IO 口都可以自由编程,但 IO 口寄存器必须要按 32 位字被编辑被访问(因为系统本身是32位),CRL 和 CRH 控制着每个 IO 口的 模式 及 输出速率, 只不过 CRL 是 控制 低8位的GPIO接口( GPIO0至GPIO7 ); CRH 是 控制 高8位的GPIO接口(

stm32 嵌入式开发 用标准库进行 ADC 实验总结

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-09 10:00:04
------------恢复内容开始------------ 硬件原理图 ,滑动电位器与芯片PC3引脚连接 根据开发板可知: STM32F429IGT6 有 3 个 ADC ,每个 ADC 有 12 位、 10 位、 8 位和 6 位可选,每个 ADC 有 16 个外部通道。         每个ADC 同时还有3个内部通道:通道16/17/18         工作模式有3种: 独立模式、双重模式和三重模式 。 转换顺序可分为:规则序列,注入序列。如下图所示: 规则序列寄存器设置根据表由上到下选择通道进行配置 注入序列寄存器JSQR转换顺序为JSQR [X] [4:0],                   X=4-JL,JL为需要转换的通道 触发源可选择:ADC2_CR2->ADON        外部事件触发:内部定时器、外部IO (EXTSEL[2:0] JEXTSEL[2:0]控制 ) 时间设置: ADC 的输入时钟ADC_CLK由PCLK2经过分频产生36MH最大z频率 采样时间:每个通道可以设置不同的采样频率,最小的采样时间是3个周期1/ADC_CLK     ADC总转换时间= 采样时间+12个时钟周期 数据寄存器:ADC_DR 1个32位寄存器,最低16位有效。独立模式时使用,可以开启DMA模式       ADC_JDRX 4个32位寄存器,低16位有效    

STM32 CubeMX 学习:004-PWM

╄→尐↘猪︶ㄣ 提交于 2020-03-09 09:51:59
背景 上一讲,我们介绍了STM32有关的定时器,并示范了如何使用定时器来定时。这一讲我们来试试PWM(Pulse Width Modulation, 脉冲宽度调制),这是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。广泛应用在从测量、通信到功率控制与变换的许多领域中。 知识 脉冲调制有两个重要的参数,(在STM32中,这两个因素分别通过两个寄存器控制:TIMX_ARR和TIMX_CCRX) 输出频率,频率越高,则模拟的效果越好。 占空比。占空比就是改变输出模拟效果的电压大小。占空比越大则模拟出的电压越大。 PWM值:在一个周期内,开关管导通时间长短相加的平均值。导通时间越长,则直流输出的平均值越大。(因此,可以等效于模拟电路) PWM输出频率:指这一次导通到下一次导通的时间的倒数。 PWM占空比:指的是输出的PWM中, 高电平 保持的时间 与 该PWM的时钟周期的时间之比。 如,一个PWM的频率是1000Hz(时钟周期就是1ms,1000us),如果高电平出现的时间是200us,那么低电平的时间肯定是800us,那么占空比就是200:1000,也就是说PWM的占空比就是1:5。 PWM分辨率:分辨率也就是占空比最小能达到多少,如8位的PWM,理论的分辨率就是1:255(单斜率),16位的的PWM理论就是1:65535(单斜率)。频率就是这样的,如16位的PWM

STM32自学笔记 第八篇,看门狗WWDG

风格不统一 提交于 2020-03-09 04:45:06
WWDG窗户看门狗监控的比较小的范围,本质是一个7位递减计数器最大值为0x7F;当递减是0X40时还不喂狗就会进行复位,只要在数字变为3F之前重新装载数字就可以不复位,称之为喂狗!当数字减到0x40时不会复位,会唤醒一个中断,可以再此中断里重装载,只有当数字变为0x3f时才会复位! 来源: CSDN 作者: sunmaotaostm 链接: https://blog.csdn.net/sunmaotaostm/article/details/104734831