DAC设置输出指定电压(stm32 CubeMX HAL)

1、芯片型号(stm32G473CBTx)

2、时钟设置

3、DAC配置

4、DAC输出基准电压设置

5、DAC设置代码

在main函数的初始化结束后就设置DAC输出,这里首先用了5s延时,保证供电电压稳定。

设置DAC对齐方式为12位右对齐,那么DAC值的设置范围就是0~4095(2^12 - 1 = 4095),当我想要设置DAC输出1.8V的电压时(确保上述第4步设置的DAC转换输出的基准电压(2.5V)大于我想要输出的指定电压(1.8V)),那么应当设置的DAC值就是2949.12,保险起见设置到2950问题也不大,然后使用万用表测量DAC转换输出的引脚,根据实际测量的电压值对设置的DAC值进行微调就行(设置的DAC值和DAC转换输出的电压值是正反馈的关系)。

6、关于DAC更详细的配置请参考STM32芯片对应的官方数据手册或者其他大神的博客资料。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 在STM32CubeMX中选择您的目标芯片型号,并创建一个新的工程。 2. 在“Pinout”选项卡中配置您的GPIO引脚。选择一个输出引脚并将其配置为“GPIO_Output”模式。 3.在“Clock Configuration”选项卡中,配置您的系统时钟源和时钟速度。 4. 在“DAC”选项卡中启用DAC,并选择您要使用的DAC通道。您还需要配置DAC输出电压范围和精度。 5. 在“DAC Signal Generation”选项卡中,选择“Sine”波形,并设置您要生成的正弦波的频率和振幅。 6. 在“Project Manager”选项卡中生成代码并导出项目到您的开发环境中。 7. 在您的代码中初始化DAC,并将输出设置为您从STM32CubeMX中生成的正弦波数据。 8. 启动DAC并在主循环中反复更新DAC输出值以生成正弦波。 以下是一个示例代码片段,可用于在STM32CubeMX生成的代码基础上生成1kHz正弦波: ``` #include "stm32f4xx_hal.h" DAC_HandleTypeDef hdac; /* 正弦波数组 */ const uint16_t sine_wave[32] = { 2047, 2447, 2831, 3185, 3495, 3750, 3939, 4056, 4095, 4056, 3939, 3750, 3495, 3185, 2831, 2447, 2047, 1647, 1263, 909, 599, 344, 155, 38, 0, 38, 155, 344, 599, 909, 1263, 1647 }; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_DAC_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_DAC_Init(); HAL_DAC_Start(&hdac, DAC_CHANNEL_1); while (1) { for (int i = 0; i < 32; i++) { HAL_DAC_SetValue(&hdac, DAC_CHANNEL_1, DAC_ALIGN_12B_R, sine_wave[i]); HAL_Delay(1); // 控制输出频率为1kHz } } } void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; __HAL_RCC_PWR_CLK_ENABLE(); __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLM = 8; RCC_OscInitStruct.PLL.PLLN = 168; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 7; HAL_RCC_OscConfig(&RCC_OscInitStruct); RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1 |RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5); } static void MX_DAC_Init(void) { DAC_ChannelConfTypeDef sConfig; hdac.Instance = DAC; HAL_DAC_Init(&hdac); sConfig.DAC_Trigger = DAC_TRIGGER_NONE; sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE; HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1); } static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_4; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } ``` 请注意,此代码假定您已经将DAC输出引脚配置为PA4。如果要使用其他引脚,请在MX_GPIO_Init函数中进行相应更改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值