CubeMX配置DAC雙通道輸出電壓和任意波形
一、相關函數
HAL_StatusTypeDef HAL_DAC_SetValue(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t Alignment, uint32_t Data)//設置DAC輸出電壓值
HAL_StatusTypeDef HAL_DAC_Start(DAC_HandleTypeDef* hdac, uint32_t Channel)//使能DAC通道
uint32_t HAL_DAC_GetValue(DAC_HandleTypeDef* hdac, uint32_t Channel)//獲取相應通道的輸出值
HAL_StatusTypeDef HAL_DAC_Stop(DAC_HandleTypeDef* hdac, uint32_t Channel);
HAL_StatusTypeDef HAL_DAC_Start_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel, uint32_t* pData, uint32_t Length, uint32_t Alignment);
HAL_StatusTypeDef HAL_DAC_Stop_DMA(DAC_HandleTypeDef* hdac, uint32_t Channel);
二、輸出電壓
比較簡單,直接上代碼
int main(void)
{
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DAC_Init();
MX_UART4_Init();
HAL_DAC_SetValue(&hdac,DAC_CHANNEL_1,DAC_ALIGN_8B_R,128);
HAL_DAC_SetValue(&hdac,DAC_CHANNEL_2,DAC_ALIGN_8B_R,255);
HAL_DAC_Start(&hdac,DAC_CHANNEL_1);
HAL_DAC_Start(&hdac,DAC_CHANNEL_2);
while (1)
{
printf("DAC-Channel 1 : %d\\r\\n",HAL_DAC_GetValue(&hdac,DAC_CHANNEL_1));
printf("DAC-Channel 2 : %d\\r\\n\\n",HAL_DAC_GetValue(&hdac,DAC_CHANNEL_2));
HAL_Delay(1000);
}
}
三、定時器觸發DAC+DMA輸出任意波形
(1)配置TIM6,話不多說,10ms觸發一次,即100HZ。 如下圖:
(2)配置DAC,比較簡單,不多說,注意使能DMA:
(3)編程實現
int main(void)
{
const uint16_t CH_value[32] = { 2448,2832,3186,3496,3751,3940,4057,4095,
4057,3940,3751,3496,3186,2832,2448,2048,
1648,1264,910,600,345,156,39,0,39,156,345,
600,910,1264,1648,2048};
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_DAC_Init();
MX_UART4_Init();
MX_TIM6_Init();
HAL_TIM_Base_Start(&htim6);
HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_1,(uint32_t *)CH_value,32,DAC_ALIGN_12B_R);
while (1)
{
printf("DAC->Channel1 : %d\\r\\n",HAL_DAC_GetValue(&hdac,DAC_CHANNEL_1));
HAL_Delay(10);
}
}
四、定時器觸發DAC+DMA輸出三波形
(1)CubeMX配置
最大三角波幅(Maximum Triangle Amplitude)為4095,即為3.3V(參考電壓為3.3V)
(2)編程實現
1 void MX_DAC_Init(void)
2 {
3 DAC_ChannelConfTypeDef sConfig = {0};
4
5 /** DAC Initialization
6 */
7 hdac.Instance = DAC;
8 if (HAL_DAC_Init(&hdac) != HAL_OK)
9 {
10 Error_Handler();
11 }
12 /** DAC channel OUT1 config
13 */
14 sConfig.DAC_Trigger = DAC_TRIGGER_T6_TRGO;
15 sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
16 if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1) != HAL_OK)
17 {
18 Error_Handler();
19 }
20 /** DAC channel OUT2 config
21 */
22 if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_2) != HAL_OK)
23 {
24 Error_Handler();
25 }
26 /** Configure Triangle wave generation on DAC OUT2
27 */
28 if (HAL_DACEx_TriangleWaveGenerate(&hdac, DAC_CHANNEL_2, DAC_TRIANGLEAMPLITUDE_4095) != HAL_OK)
29 {
30 Error_Handler();
31 }
32
33 }
34
35
36
37 int main(void)
38 {
39 /* USER CODE BEGIN 1 */
40 const uint16_t CH_value[32] = { 2448,2832,3186,3496,3751,3940,4057,4095,
41 4057,3940,3751,3496,3186,2832,2448,2048,
42 1648,1264,910,600,345,156,39,0,39,156,345,
43 600,910,1264,1648,2048};
44 /* USER CODE END 1 */
45
46
47 /* MCU Configuration--------------------------------------------------------*/
48
49 /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
50 HAL_Init();
51
52 /* USER CODE BEGIN Init */
53
54 /* USER CODE END Init */
55
56 /* Configure the system clock */
57 SystemClock_Config();
58
59 /* USER CODE BEGIN SysInit */
60
61 /* USER CODE END SysInit */
62
63 /* Initialize all configured peripherals */
64 MX_GPIO_Init();
65 MX_DMA_Init();
66 MX_DAC_Init();
67 MX_UART4_Init();
68 MX_TIM6_Init();
69 /* USER CODE BEGIN 2 */
70 HAL_TIM_Base_Start(&htim6);
71 HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_1,(uint32_t *)CH_value,32,DAC_ALIGN_12B_R);
72 HAL_DAC_Start(&hdac,DAC_CHANNEL_2);
73 /* USER CODE END 2 */
74
75 /* Infinite loop */
76 /* USER CODE BEGIN WHILE */
77 while (1)
78 {
79 /* USER CODE END WHILE */
80 printf("DAC Channel 1 ------> %d\\r\\n",HAL_DAC_GetValue(&hdac,DAC_CHANNEL_1));
81 printf("DAC Channel 2 ------> %d\\r\\n\\n",HAL_DAC_GetValue(&hdac,DAC_CHANNEL_2));
82 HAL_Delay(10);
83 /* USER CODE BEGIN 3 */
84 }
85 /* USER CODE END 3 */
86 }
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
dac
+關注
關注
43文章
2271瀏覽量
190840 -
輸出電壓
+關注
關注
2文章
1092瀏覽量
38025 -
函數
+關注
關注
3文章
4306瀏覽量
62431 -
dma
+關注
關注
3文章
559瀏覽量
100430 -
任意波形
+關注
關注
0文章
8瀏覽量
7571
發布評論請先 登錄
相關推薦
STM32單片機基礎20——使用DAC輸出任意指定電壓 相關資料推薦
【STM32Cube_20】使用DAC輸出任意指定電壓值tags: STM32CubeMX DACcategories: STM32CubeMX
發表于 07-01 06:45
如何使用STM32CubeMX配置STM32L431RCT6的DAC外設輸出任意指定電壓值?
如何使用STM32CubeMX配置STM32L431RCT6的DAC外設輸出任意指定電壓值?
發表于 10-13 09:13
RIGOL DG4000系列雙通道 函數/任意波形發生器性能特點
。DG4000可以輸出16次諧波,真實模擬諧波信號,并且兩個通道均能輸出,互不干擾。??六. 7英寸高清屏。為了給工程師提供更好的使用體驗,DG4000系列 雙通道 函數/
發表于 01-05 14:11
MFG-2220HM雙通道任意波形信號發生器的性能特點及應用
MFG-2220HM雙通道任意波形信號發生器,包括了CH1與CH2為兩個最高頻率為200MHz的等性能雙通道AFG(任意
AN-1198: 利用AD5722R DAC提供軟件可配置的12位、雙通道、單極性/雙極性電壓輸出
AN-1198: 利用AD5722R DAC提供軟件可配置的12位、雙通道、單極性/雙極性電壓輸出
發表于 03-21 17:08
?9次下載
AN-1197:使用AD5732R DAC的軟件可配置14位雙通道單極/雙極電壓輸出
AN-1197:使用AD5732R DAC的軟件可配置14位雙通道單極/雙極電壓輸出
發表于 05-07 19:50
?12次下載
STM32單片機基礎20——使用DAC輸出任意指定電壓
: 2707806886date: 2019-07-31 10:48:56本篇詳細的記錄了如何使用STM32CubeMX配置STM32L431RCT6的DAC外設,輸出任意指定
發表于 11-19 09:36
?57次下載
DAC53xAxW具有I2C或SPI的10位三通道和雙通道電壓輸出和電流輸出智能DAC數據表
電子發燒友網站提供《DAC53xAxW具有I2C或SPI的10位三通道和雙通道電壓輸出和電流輸出
發表于 07-12 09:42
?0次下載
DAC82002 16位、低毛刺脈沖、雙通道電壓輸出、非緩沖DAC數據表
電子發燒友網站提供《DAC82002 16位、低毛刺脈沖、雙通道電壓輸出、非緩沖DAC數據表.pdf》資料免費下載
發表于 07-15 10:07
?0次下載
DAC8552雙通道、電壓輸出數模轉換器(DAC)數據表
電子發燒友網站提供《DAC8552雙通道、電壓輸出數模轉換器(DAC)數據表.pdf》資料免費下載
發表于 07-26 09:15
?1次下載
評論