文档章节

stm32 DAC

kangxin1234
 kangxin1234
发布于 2015/09/10 16:48
字数 513
阅读 120
收藏 0

          STM32的数字/模拟转换模块(DAC)是12位的数字输入,电压输出的数模转换器。虽然是12位的,但是也可以配置成8位的模式(即数字输入可以是12位或者8位)。它可以与DMA控制器配合使用。在12位数字输入模式时,数据的对齐方式可以左对齐或者右对齐,而8位模式在下是固定的右对齐(无需配置)。DAC模块有2个通道,每个通道都是独立的,这也导致了DAC可以单通道独立使用,也可以双通道同时使用。2个通道分别对应的是PA4(1通道)、PA5(2通道)。

        DAC主要特性:

            2个DAC转换器,每个转换器对应1个输出通道 

            ●8位或者12位单调输出 

            ● 12位模式下数据左对齐或者右对齐

             ● 同步更新功能 

            ● 噪声波形生成 

            ● 三角波形生成 

            ● 双DAC通道同时或者分别转换

             ● 每个通道都有DMA功能

             ● 外部触发转换 

            ● 输入参考电压VREF+

            ●转换时间,据说是1us

    配置函数:

    简单的使用DAC1功能。

#include "adc.h"
void DAC1_Init(void)
{
  
	GPIO_InitTypeDef GPIO_InitStructure;
	DAC_InitTypeDef DAC_InitType;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE );	  //使能PORTA通道时钟
   	RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE );	  //使能DAC通道时钟 

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;				 // 端口配置
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; 		 //模拟输入
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOA, &GPIO_InitStructure);
	GPIO_SetBits(GPIOA,GPIO_Pin_4)	;//PA.4 输出高
					
	DAC_InitType.DAC_Trigger=DAC_Trigger_None;	//不使用触发功能 TEN1=0
	DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生
	DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;//屏蔽、幅值设置
	DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;	//DAC1输出缓存关闭 BOFF1=1
    DAC_Init(DAC_Channel_1,&DAC_InitType);	 //初始化DAC通道1

	DAC_Cmd(DAC_Channel_1, ENABLE);  //使能DAC1
  
    DAC_SetChannel1Data(DAC_Align_12b_R, 0);  //12位右对齐数据格式设置DAC值

}

//设置通道1输出电压
//vol:0~3300,代表0~3.3V
void DAC1_Set_Vol(u16 vol)
{
	float temp=vol;
	temp/=1000;
	temp=temp*4096/3.3;
	DAC_SetChannel1Data(DAC_Align_12b_R,temp);//12位右对齐数据格式设置DAC值
}

    用起来比较方便,初始化一下直接调用DAC1_Set_Vol()函数就行了。

    参考战舰开发板资料。

© 著作权归作者所有

kangxin1234

kangxin1234

粉丝 38
博文 51
码字总数 35417
作品 0
程序员
私信 提问
NuttX 6.13 发布,实时嵌入式系统

NuttX 6.13 发布,该版本包含对微芯片 PIC32MX 系列的支持,包含很多 STMicro STM32 系列新的驱动(以太网、ADC、DAC、PWM 和 CAN),修复了两个关键的bug。 Nuttx 是一个实时嵌入式操作系统...

红薯
2011/12/27
700
0
普中PZ6806开发板 STM32学习笔记1 环境配置

版权声明:(谢厂节的博客)博主文章绝大部分非原创,转载望留链接。 https://blog.csdn.net/xundh/article/details/83956071 开发板介绍 普中PZ6806L (STM32-F1)开发板,使用STM32F103ZET6...

谢厂节
2018/11/11
0
0
I2C Bit-Bang 程序分析

一、Bit Bang 关于 Bit Bang 的解释:Use software to control serial communication at general-purpose I/O pins,简单来讲就是使用软件通过 IO 脚去实现 I2C 的时序从而使用 I2C 协议进行通...

u011303443
2017/03/16
0
0
端口的复用——基于STM32F767IGT6

基本概念: 在STM32中有很多内置外设,这些内置外设的操作也是通过140根GPIO引脚的,如果一个GPIO引脚复用为内置外设的功能,那么此时就叫做GPIO的功能复用: 例:串口1的发送和接收引脚可选...

u014663232
2018/04/17
0
0
stm32 启动文件.s源码 分析

; Amount of memory (in bytes) allocated for Stack ; Tailor this value to your application needs ; <h> Stack Configuration ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> ; </h> S......

cicue
2014/03/19
265
0

没有更多内容

加载失败,请刷新页面

加载更多

PostgreSQL 11.3 locking

rudi
55分钟前
5
0
Mybatis Plus sql注入器

一、继承AbstractMethod /** * @author beth * @data 2019-10-23 20:39 */public class DeleteAllMethod extends AbstractMethod { @Override public MappedStatement injectMap......

一个yuanbeth
今天
10
1
一次写shell脚本的经历记录——特殊字符惹的祸

本文首发于微信公众号“我的小碗汤”,扫码文末二维码即可关注,欢迎一起交流! redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要...

码农实战
今天
4
0
为什么阿里巴巴Java开发手册中不建议在循环体中使用+进行字符串拼接?

之前在阅读《阿里巴巴Java开发手册》时,发现有一条是关于循环体中字符串拼接的建议,具体内容如下: 那么我们首先来用例子来看看在循环体中用 + 或者用 StringBuilder 进行字符串拼接的效率...

武培轩
今天
8
0
队列-链式(c/c++实现)

队列是在线性表功能稍作修改形成的,在生活中排队是不能插队的吧,先排队先得到对待,慢来得排在最后面,这样来就形成了”先进先出“的队列。作用就是通过伟大的程序员来实现算法解决现实生活...

白客C
今天
80
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部