片内DAC和片外dac的区别,并给予嵌入式stm32f103代码例子
时间: 2023-12-14 14:39:46 浏览: 66
片内DAC和片外DAC的区别主要在于它们的位置和连接方式。片内DAC是集成在处理器芯片内部的数字模拟转换器,而片外DAC则需要外部连接到处理器芯片上。
由于片内DAC直接集成在芯片内部,因此具有体积小、功耗低、易于集成等优点。但是,由于受到芯片制造工艺的限制,其分辨率和精度可能会受到一定的限制。
相比之下,片外DAC则可以通过外部连接方式实现更高的分辨率和精度,但需要占用更多的空间、功耗更高,并且需要处理与处理器芯片的通信接口。
以下是嵌入式stm32f103的代码示例,该代码使用片内DAC输出正弦波:
```
#include "stm32f10x.h"
#define DAC_DHR12R1_ADDRESS 0x40007408
const uint16_t sin_wave[] = {2048,2400,2751,3090,3417,3727,4017,4282,4519,4723,4891,5020,5108,5153,5153,5108,5020,4891,4723,4519,4282,4017,3727,3417,3090,2751,2400,2048,1696,1345,1006,678,386,226,101,14,0,53,166,334,553,812,1101,1410,1730,2050,2360,2652,2917,3150,3338,3477,3567,3609,3609,3567,3477,3338,3150,2917,2652,2360,2050,1730,1410,1101,812,553,334,166,53,0,14,101,226,386,678,1006,1345,1696};
int main(void)
{
uint32_t i = 0;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
DAC_InitTypeDef DAC_InitStructure;
DAC_InitStructure.DAC_Trigger = DAC_Trigger_None;
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
DAC_Init(DAC_Channel_1, &DAC_InitStructure);
DAC_Cmd(DAC_Channel_1, ENABLE);
while (1)
{
DAC_SetChannel1Data(DAC_Align_12b_R, sin_wave[i++]);
if (i == 64)
{
i = 0;
}
for (uint32_t delay = 0; delay < 1000; delay++);
}
}
```
该示例通过使用stm32f103芯片内部的DAC模块,每次循环输出正弦波数组中的一个数据。可以通过修改正弦波数组来输出不同形状的波形。
阅读全文