STM32F103VCT6自带两个12位DAC,DAC的转换速度一直没有查到,网上有人说是1MHZ的频率,那就是1us了。ADC的转换时间在56MHZ工作频率下为1us,在72MHZ工作频率下为1.17us。如果AD和DA有对称关系的话,那么很可能跟ADC的时间相同,刚入手分析的,不见得正确!
由于我此次使用是DA输出电压。STM32的DAC固定电压配置和波形输出配置相似,不同的地方在于它要多调用一个函数:DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);这样才会输出固定的电平。
具体配置如下:
void DAC_VOLTAGE_Configuration(void)
{
DAC_InitTypeDef DAC_InitStructure;
DAC_DeInit();
DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
DAC_Init(DAC_Channel_1, &DAC_InitStructure);
DAC_Cmd(DAC_Channel_1, ENABLE);
DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);
}
配置完成后,调用DAC_SetChannel1Data(DAC_Align_12b_R,4000);函数就可以发送数据了!!有两点要注意:1、该函数的第一个参数DAC_Align_12b_R不可依据设置ADC外设地址的方式重写这个地址,因为这个参数是不带基址的,而我们重写地址后一半会把基址算进去,这样就不对了!(笔者就曾经卡在这里!看来凡事不可先入为主,否则问题迟早会发生。)2、每次改变发送数据时,要同时调用以下两个函数:
DAC_SetChannel1Data(DAC_Align_12b_R,4000);
DAC_SoftwareTriggerCmd(DAC_Channel_1,ENABLE);
至于为什么,我的理解是:因为DAC改变数据后并不会立即写入寄存器,需要一次更新,由于不是通过定时器触发来更新,因此就只能通过调用函数的方法来更新。
关键字:STM32 DAC 固定电压 输出配置
引用地址:
STM32之DAC固定电压输出配置
推荐阅读最新更新时间:2024-11-13 18:55
STM32(9) GPIO口复用功能实现(正点原子)
一个GPIO口可以 复用成内部外设的功能引脚,这里我们利用PA9PA10设置为UART1来举例。 IO口对应的复用功能需要查表来确定。这个表在芯片手册 下面这个图讲解了GPIO口的复用原理 上图右边左图是复用器(AFRL(31:0)、AFRH(31:0)),要复用哪个引脚就将相应的GPIO连接到复用器上,即可。 那么接下来我们就讲解 一下如何利用复用器去将GPIO口配置成复用功能。AFRL和AFRH都是32的寄存器,每一个GPIO口占用4位,所以在一组IO口中,他的低8位(PA0-PA7)占用AFRL,他的高8位(PA8-PA15)占用AFRH。 例如:我们要配置GPIOA2配置成UART2, 1.G
[单片机]
STM32之串口DMA接收不定长数据
引言 在使用stm32或者其他单片机的时候,会经常使用到串口通讯,那么如何有效地接收数据呢?假如这段数据是不定长的有如何高效接收呢? 同学A:数据来了就会进入串口中断,在中断中读取数据就行了! 中断就是打断程序正常运行,怎么能保证高效呢?经常把主程序打断,主程序还要不要运行了? 同学B:串口可以配置成用DMA的方式接收数据,等接收完毕就可以去读取了! 这个同学是对的,我们可以使用DMA去接收数据,不过DMA需要定长才能产生接收中断,如何接收不定长的数据呢? DMA简介 题外话:其实,上面的问题是很有必要思考一下的,不断思考,才能进步。 什么是DMA DMA:全称Direct Memory Access,即直
[单片机]
stm32变更外部晶振时时钟配置
学习野火的固件库UART1串口案例时,用的是SIM9008模块应用板上STM32103F103RB芯片,使用的外部晶振是12M。 串口读取的是乱码 默认的外部晶振是8M 由于stm32的库默认是外部晶振8M的情况下实现的,所以配置串口波特率的时候也是按8M,包括主频。 如果采用外部晶振8M或12M,配置时钟为72MHZ 。 1)在system32_stm32f10x.c文件中的void SetSysClockTo72(void)里这样改: 8M: RCC- CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);//8*9=72 12M: RCC- CFGR |=
[单片机]
基于STM32+RFID设计的宿舍检修管理系统
1. 需求 需求: 一个寝室一个标签,设备端扫描标签,通过显示屏键入维修成功与否之类的的信息提交到平台 系统构架: 一个设备端 + 一个上位机 硬件选型: (1)STM32F103RCT6作为设备端的主控MCU (2)RC522作为设备端的射频刷卡设备,读写IC卡 (3)多张IC卡,模拟代表每个宿舍 实现思路: 设计一个上位机,用来管理查看维修检修信息,当维修寝室的设备或者检修完成时,通过STM32上的RC522刷一下这个寝室的IC卡,识别这是哪个寝室,识别成功后在软件上弹出一个对话框,填写本次维修或者检修的事件,填写完毕点击提交即可。 软件分为两个功能: (1)注册功能:每个寝室都有一张IC卡,这张卡第一次使用需
[单片机]
以STM32单片机解析说明PVD的使用
前言 有时在一些应用中,我们需要检测系统是否掉电了,或者要在掉电的瞬间需要做一些处理。STM32就有这样的掉电检测机制——PVD(Programmable Voltage Detecter),即可编程电压检测器。通过PVD我们可以设定一个基准电压,当芯片的供电电压高于或低于该基准电压时便产生PVD中断,我们可以在PVD中断里做一些处理。 PVD介绍 本文以STM32F1x为例,来说明PVD的使用。 用户可以利用PVD对VDD电压与电源控制寄存器(PWR_CR)中的PLS 位进行比较来监控电源,这几位选择监控电压的阀值。 通过设置PVDE位来使能PVD。电源控制/状态寄存器(PWR_CSR)中的PVDO标志用来表明VDD
[单片机]
STM32中的GPIO结构
1、GPIO内部结构 2、GPIO输入模式 (1)浮空输入模式 (2)输入上拉模式 (3)输入下拉模式 (4)模拟输入模式 3、GPIO输出模式 (1)开漏输出模式 (2)开漏复用输出模式 (3)推挽输出模式 (4)推挽复用输出模式 4、3.GPIO初始化步骤 具体寄存器需要参考STM32F1x手册 (1)确定GPIO的工作模式和工作速度 通过配置寄存器GPIOx_CRL和GPIOx_CRH (2)具体要输出的内容 置位复位寄存器:BSRR和数据输出寄存器:ODR 5、总结 (1)推挽输出 a、可以输出高低电平,用于连接数字器件,高电平由VDD决定,低电平由V
[单片机]
STM32 CAN总线通信学习笔记(一)
一、CAN总线简介 CAN 是控制器局域网络(Controller Area Network, CAN)的简称。CAN采用数据块编码的方式,数据块根据帧的类型,能够让挂载在总线上的不同节点接收到相同的数据,再根据每个节点的配置对信息进行选择性处理(处理or丢弃)。CAN总线具有以下特点: 1. 多主控制 在总线空闲时,所有的单元都可以发送消息;具有CSMA/CA机制,即最先访问总线的单元可获得发送权;多个单元同时发送消息时,优先级高的标志(ID)单元可获得发送权,其中ID并不是发送的目的地址,而是表示访问总线的消息的优先级,仲裁机制会对消息ID的每个位继续比较,仲裁为高优先级的单元可继续发送消息,仲裁失败的单元则停止发送而进行
[单片机]
GD32代码移植STM32(一)
GAIWEI例子:GD32F103移植STM32F103 使用相同FLASH和管脚数量相同的芯片,例如GDF103C8T6移植STM32F103C8T6程序。虽然两个款芯片的寄存器地址以及架构基本相同。但是需要注意的是GD32F10x主频是108兆,但是STM32F10x主频是72兆。所以需要针对以RCC时钟进行修改。 1.先将芯片的选项进行修改:查找对应芯片。 2.将STM32的启动文件替换成GD的启动文件。 3.修改时钟相关配置。 打开stm32f10x.h文件,#define HSE_STARTUP_TIMEOUT ((uint16_t)0x0500) /*! Time out for HSE start up
[单片机]