打印
[开发生态]

SWM341的DAC使用方法

[复制链接]
461|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xixi2017|  楼主 | 2023-3-29 17:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "SWM341.h"

uint16_t sin_data[100] = {
    2048,  2176,  2304,  2431,  2557,  2680,  2801,  2919,  3034,  3144,
    3251,  3352,  3449,  3540,  3625,  3704,  3776,  3841,  3900,  3951,
    3994,  4030,  4058,  4078,  4090,  4095,  4090,  4078,  4058,  4030,
    3994,  3951,  3900,  3841,  3776,  3704,  3625,  3540,  3449,  3352,
    3251,  3144,  3034,  2919,  2801,  2680,  2557,  2431,  2304,  2176,
    2047,  1919,  1791,  1664,  1538,  1415,  1294,  1176,  1061,   951,
     844,   743,   646,   555,   470,   391,   319,   254,   195,   144,
     101,    65,    37,    17,     5,     1,     5,    17,    37,    65,
     101,   144,   195,   254,   319,   391,   470,   555,   646,   743,
     844,   951,  1061,  1176,  1294,  1415,  1538,  1664,  1791,  1919,
};

void SerialInit(void);

int main(void)
{
        uint32_t i, j;
       
        SystemInit();
       
        SerialInit();
       
        PORT_Init(PORTD, PIN2, PORTD_PIN2_DAC_OUT, 0);
       
        DAC_Init(DAC, DAC_FORMAT_LSB12B);
       
        SYS->DACCR &= ~SYS_DACCR_VRADJ_Msk;
        SYS->DACCR |= (17 << SYS_DACCR_VRADJ_Pos);
       
        DAC_Open(DAC);
          
        while(1==1)
        {
                for(i = 0; i < sizeof(sin_data)/sizeof(sin_data[0]); i++)
                {
                        DAC->DHR = sin_data[i];
                       
                        while(DAC->SR & DAC_SR_DHRFULL_Msk) __NOP();
                       
                        for(j = 0; j < CyclesPerUs*100; j++) __NOP();
                }
        }
}


void SerialInit(void)
{
        UART_InitStructure UART_initStruct;
       
        PORT_Init(PORTM, PIN0, PORTM_PIN0_UART0_RX, 1);        //GPIOM.0配置为UART0输入引脚
        PORT_Init(PORTM, PIN1, PORTM_PIN1_UART0_TX, 0);        //GPIOM.1配置为UART0输出引脚
       
        UART_initStruct.Baudrate = 57600;
        UART_initStruct.DataBits = UART_DATA_8BIT;
        UART_initStruct.Parity = UART_PARITY_NONE;
        UART_initStruct.StopBits = UART_STOP_1BIT;
        UART_initStruct.RXThresholdIEn = 0;
        UART_initStruct.TXThresholdIEn = 0;
        UART_initStruct.TimeoutIEn = 0;
        UART_Init(UART0, &UART_initStruct);
        UART_Open(UART0);
}

/******************************************************************************************************************************************
* 函数名称: fputc()
* 功能说明: printf()使用此函数完成实际的串口打印动作
* 输    入: int ch                要打印的字符
*                        FILE *f                文件句柄
* 输    出: 无
* 注意事项: 无
******************************************************************************************************************************************/
int fputc(int ch, FILE *f)
{
        UART_WriteByte(UART0, ch);
       
        while(UART_IsTXBusy(UART0));
       
        return ch;
}


使用特权

评论回复

相关帖子

沙发
tpgf| | 2023-4-11 16:05 | 只看该作者
使用查表的方式会不会影响计算得到精度呢

使用特权

评论回复
板凳
观海| | 2023-4-11 16:46 | 只看该作者
外部使用的是什么驱动器件呢

使用特权

评论回复
地板
guanjiaer| | 2023-4-12 11:07 | 只看该作者
感觉计算的挺简单的 这个表的原理是什么呢

使用特权

评论回复
5
heimaojingzhang| | 2023-4-12 11:36 | 只看该作者
大部分情况下 DAC都用于什么用途呢

使用特权

评论回复
6
keaibukelian| | 2023-4-12 11:52 | 只看该作者
heimaojingzhang 发表于 2023-4-12 11:36
大部分情况下 DAC都用于什么用途呢

DAC的作用就是把输入的数字编码,转换成对应的模拟电压输出

使用特权

评论回复
7
paotangsan| | 2023-4-12 12:04 | 只看该作者
dac的外部执行器件楼主使用的是什么呢

使用特权

评论回复
8
weifeng90| | 2023-4-14 08:20 | 只看该作者
直接用函数自动产生数据啊

使用特权

评论回复
9
LOVEEVER| | 2023-4-14 14:46 | 只看该作者
DAC数字模拟转换器,是一种将数字信号转换为模拟信号(以电流、电压或电荷的形式)的设备

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

131

主题

1780

帖子

1

粉丝