damiaa 发表于 2024-3-9 23:17

【ST NUCLEO-U5A5ZJ-Q开发板测评】6 程序中加入DAC

<div class='showpostmsg'> 本帖最后由 damiaa 于 2024-3-9 23:26 编辑

<div><span style="font-size:20px;"><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 【</strong><strong>ST NUCLEO-U5A5ZJ-Q开发板测评】6 程序中加入DAC</strong></span></div>

<div>&nbsp;</div>

<div>&nbsp;</div>

<div><strong>一、简介</strong></div>

<div>DAC(digital to analog converter)即数模转换器,它可以将数字信号转换为模拟信号,它的功能与ADC相反。在常见的数字信号系统中,大部分传感器信号被转化成电压信号,而ADC把电压模拟信号转换成易于计算机存储、处理的数字编码,由计算机处理完成后,再由DAC输出电压模拟信号来驱动某些执行器件,使人类易于感知。如音频信号的采集和还原就是这样的一个过程</div>

<div>STM32U5A5的DAC模块是12位数字输入,电压输出型的DAC。DAC模块有2个输出通道,每个通道都有单独的转换器。在双DAC模式下,2个通道可以独立地进行转换,也可以同时进行转换并同步地更新2个通道的输出。DAC可以通过引脚输入参考电压VREF+以获得更精确的转换结果。</div>

<div></div>

<div><strong>二、电路介绍</strong></div>

<div></div>

<div></div>

<div></div>

<div>&nbsp;</div>

<div><strong>三、开启stm32cubeide</strong></div>

<div></div>

<div>&nbsp;</div>

<div><strong>四、保存生成代码</strong></div>

<div></div>

<div></div>

<div>&nbsp;</div>

<div><strong>五、加入代码</strong></div>

<div>1,串口中加入命令设置dac的值,设置标记</div>

<div>这样串口可以输入字符命令</div>

<div>dac1 00001000</div>

<div></div>

<div>2,主程序中加入dac控制代码</div>

<div></div>

<div>&nbsp;</div>

<div><strong>六、整体代码</strong></div>

<div>
<pre>
<code class="language-cpp">/* USER CODE BEGIN Header */
/**
******************************************************************************
* <a href="home.php?mod=space&amp;uid=1307177" target="_blank">@File </a>         : main.c
* <a href="home.php?mod=space&amp;uid=159083" target="_blank">@brief </a>          : Main program body
******************************************************************************
* @attention
*
* Copyright (c) 2024 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include &quot;main.h&quot;

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include &quot;stdio.h&quot;
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
uint8_t rx1_buff;
#define R1XB_MAX 100
uint8_t rx1_b;
uint8_t rx1_b_index=0;
uint32_t adc2_tim=0;
uint32_t dac1_val=0;
uint8_t dac1_flag=0;
//char uart_buf={0};
/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
ADC_HandleTypeDef hadc1;

DAC_HandleTypeDef hdac1;

TIM_HandleTypeDef htim6;
TIM_HandleTypeDef htim7;

UART_HandleTypeDef huart1;

HCD_HandleTypeDef hhcd_USB_OTG_HS;

/* USER CODE BEGIN PV */

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void SystemPower_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
static void MX_ICACHE_Init(void);
static void MX_UCPD1_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_USB_OTG_HS_HCD_Init(void);
static void MX_TIM6_Init(void);
static void MX_TIM7_Init(void);
static void MX_DAC1_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
uint8_t USERBUTTON_check(void){
        uint8_t keyval1 = HAL_GPIO_ReadPin( USER_BUTTON_GPIO_Port, USER_BUTTON_Pin);
        if(keyval1 == 1 )
        {
                HAL_Delay(50);
                uint8_t keyval1 = HAL_GPIO_ReadPin( USER_BUTTON_GPIO_Port, USER_BUTTON_Pin);
                if(keyval1 == 1 )
                {
                        uint8_t wflag=1;
                        while(wflag)
                        {
                                HAL_Delay(50);
                                keyval1 = HAL_GPIO_ReadPin( USER_BUTTON_GPIO_Port, USER_BUTTON_Pin);
                                if(keyval1 == 0 )
                                {
                                        wflag =0;
                                }
                        }
                        return 0;
                }

        }
        return 1;
}
void led_set(void)
{
       HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_SET);
       HAL_Delay(200);
       HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
       HAL_Delay(200);
       HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_SET);
       HAL_Delay(200);
       HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
       HAL_Delay(200);
       HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET);
       HAL_Delay(200);
       HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);
       HAL_Delay(200);

}
void gpioset(char r,char g,char b)
    {
            if(r==0)
                    HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
            else
                    HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_SET);
            if(g==0)
                    HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);
            else
                    HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET);
            if(b ==0)
                    HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
            else
                    HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_SET);
    }

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
   {
       UNUSED(huart);
          if(huart-&gt;Instance == USART1)
          {
                   rx1_b =rx1_buff;
                   rx1_b_index =rx1_b_index%R1XB_MAX;
                   if(rx1_buff ==0x0d)
                   {
                           //rgb 1 0 0 //10
                           if((rx1_b == &#39;r&#39;)&amp;&amp;(rx1_b == &#39;g&#39;)&amp;&amp;(rx1_b == &#39;b&#39;)&amp;&amp;(rx1_b == &#39; &#39;)&amp;&amp;(rx1_b_index &gt;=10 ))
                           {
                                   gpioset(rx1_b-0x30,rx1_b-0x30,rx1_b-0x30);
                                   rx1_b_index =0;
                                   HAL_UART_Transmit_IT(&amp;huart1, rx1_b, 10);
                           }
                           //0x64 0x61 0x63 0x31 0x20 0x30 0x30 0x30 0x30 0x31 0x30 0x30 0x30 0x0d
                       if((rx1_b == &#39;d&#39;)&amp;&amp;(rx1_b == &#39;a&#39;)&amp;&amp;(rx1_b == &#39;c&#39;)&amp;&amp;(rx1_b == &#39;1&#39;)&amp;&amp;(rx1_b == &#39; &#39;)&amp;&amp;(rx1_b_index &gt;=14))
                       {
                                char buf={0};
                                for(uint8_t i=0;i&lt;8;i++)
                                        buf =rx1_b;
                          int dacbuf=0;
                                sscanf((const char *)&amp;buf, &quot;%8d&quot;, &amp;dacbuf);
                                dac1_val =dacbuf;
                                dac1_flag=1;
                                HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET);
                       }
                       rx1_b_index =0;
                   }
                   //set r=0 g=0 b=0
               // uint8_t led_flag =rx3_buff;

               // rx3_b_index = rx3_b_index%100;
               HAL_UART_Receive_IT(huart, rx1_buff, 1); //You need to toggle a breakpoint on this line!
                // HAL_UART_Transmit_IT(&amp;huart3, rx3_buff, 1);
          }
   }

//该结构定义个基于定时器的键盘�???测动�???
typedef struct
{
          uint8_t   lastedgeVal;
          uint8_t   nowedgeVal;
          uint8_t   act;
          uint16_t    chkbuf;
}KEYCHKS;

KEYCHKS USER_key;
void key_check_init()
{
          USER_key.lastedgeVal=0;
          USER_key.nowedgeVal=0;
          USER_key.act=2; //1 down0 up 2 no
          USER_key.chkbuf=0;
}
//按键原理:当按下键盘后会出现�???次act =0;当弹起会出现一次act �???1 ,如果一直按�???或�?�一直不�??? act=2 �???直不按USER_key.nowedgeVal=USER_key.lastedgeVal�???0 �???直按�??? USER_key.nowedgeVal=USER_key.lastedgeVal�???01
//这样在主程序中就知道是按键还是没按,是按下还是弹起还是一直按�???�???
void key_check()
{
          //这里在中断中判断按键的电平高�???
       USER_key.chkbuf &lt;&lt;= 1;
       if(GPIO_PIN_RESET != HAL_GPIO_ReadPin(GPIOC, USER_BUTTON_Pin))
       {
               USER_key.chkbuf +=1;

       }
       if(USER_key.chkbuf ==0)
       {
               USER_key.nowedgeVal=0;
               if(USER_key.lastedgeVal == 1)
               {
                       USER_key.act=0;
                       USER_key.lastedgeVal=0;
               }
       }
       if(USER_key.chkbuf ==0xffff)
       {
               USER_key.nowedgeVal=1;
               if(USER_key.lastedgeVal == 0)
               {
                       USER_key.act=1;
                      USER_key.lastedgeVal=1;
               }
   }
}
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
      if(htim-&gt;Instance ==TIM6)// htim6.Instance)
      {
               // static uint8_t tim6_ts=2;
              //tim6_ts -=1;
              //if(0 == tim6_ts)
                        {
                      HAL_GPIO_TogglePin(LED_RED_GPIO_Port, LED_RED_Pin);
              //        tim6_ts=2;
                        }
                        adc2_tim++;

      }
      else if(htim-&gt;Instance ==TIM7)
      {
              key_check();
      }

}

/* USER CODE END 0 */

/**
* @briefThe application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

/* MCU Configuration--------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();

/* USER CODE BEGIN Init */

/* USER CODE END Init */

/* Configure the system clock */
SystemClock_Config();

/* Configure the System Power */
SystemPower_Config();

/* USER CODE BEGIN SysInit */
HAL_PWREx_EnableVddA();

/* USER CODE END SysInit */

/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_ADC1_Init();
MX_ICACHE_Init();
MX_UCPD1_Init();
MX_USART1_UART_Init();
MX_USB_OTG_HS_HCD_Init();
MX_TIM6_Init();
MX_TIM7_Init();
MX_DAC1_Init();
/* USER CODE BEGIN 2 */

/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);
HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
while (1)
{
          if( USER_key.act ==0)
          {
                 USER_key.act=2;
                 HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET);
                 HAL_Delay(200);
                 HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);
          }


          if( USER_key.act ==1)
          {
                USER_key.act=2;
                HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_SET);
                HAL_Delay(200);
                HAL_GPIO_WritePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin, GPIO_PIN_RESET);
          }

       if(adc2_tim &gt;=10)
       {
               adc2_tim=0;
               char uart_buf={0};
               HAL_ADC_Start(&amp;hadc1);
               uint32_t adc2_val = HAL_ADC_GetValue(&amp;hadc1);
         sprintf(uart_buf,&quot;vdd is %6d, folat display is :%f\n&quot;,(const int)adc2_val,(float)adc2_val*3.3/16384);
               HAL_UART_Transmit_IT(&amp;huart1,(const uint8_t*)&amp;uart_buf, 50);

       }
       if(dac1_flag)
       {
               dac1_flag=0;
               HAL_DAC_Start(&amp;hdac1,DAC_CHANNEL_1);
               HAL_DAC_SetValue(&amp;hdac1,DAC_CHANNEL_1,DAC_ALIGN_12B_R,dac1_val);
               HAL_Delay(200);
               HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_SET);
               HAL_Delay(200);
               HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);


       }
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}

/**
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

/** Configure the main internal regulator output voltage
*/
if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE3) != HAL_OK)
{
    Error_Handler();
}

/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI
                              |RCC_OSCILLATORTYPE_MSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
RCC_OscInitStruct.LSIState = RCC_LSI_ON;
RCC_OscInitStruct.MSIState = RCC_MSI_ON;
RCC_OscInitStruct.MSICalibrationValue = RCC_MSICALIBRATION_DEFAULT;
RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_0;
RCC_OscInitStruct.LSIDiv = RCC_LSI_DIV1;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_MSI;
RCC_OscInitStruct.PLL.PLLMBOOST = RCC_PLLMBOOST_DIV4;
RCC_OscInitStruct.PLL.PLLM = 3;
RCC_OscInitStruct.PLL.PLLN = 8;
RCC_OscInitStruct.PLL.PLLP = 8;
RCC_OscInitStruct.PLL.PLLQ = 2;
RCC_OscInitStruct.PLL.PLLR = 2;
RCC_OscInitStruct.PLL.PLLRGE = RCC_PLLVCIRANGE_1;
RCC_OscInitStruct.PLL.PLLFRACN = 0;
if (HAL_RCC_OscConfig(&amp;RCC_OscInitStruct) != HAL_OK)
{
    Error_Handler();
}

/** Initializes the CPU, AHB and APB buses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
                              |RCC_CLOCKTYPE_PCLK3;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB3CLKDivider = RCC_HCLK_DIV1;

if (HAL_RCC_ClockConfig(&amp;RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
{
    Error_Handler();
}
}

/**
* @brief Power Configuration
* @retval None
*/
static void SystemPower_Config(void)
{
HAL_PWREx_EnableVddIO2();

/*
   * Switch to SMPS regulator instead of LDO
   */
if (HAL_PWREx_ConfigSupply(PWR_SMPS_SUPPLY) != HAL_OK)
{
    Error_Handler();
}
/* USER CODE BEGIN PWR */
/* USER CODE END PWR */
}

/**
* @brief ADC1 Initialization Function
* @param None
* @retval None
*/
static void MX_ADC1_Init(void)
{

/* USER CODE BEGIN ADC1_Init 0 */

/* USER CODE END ADC1_Init 0 */

ADC_ChannelConfTypeDef sConfig = {0};

/* USER CODE BEGIN ADC1_Init 1 */

/* USER CODE END ADC1_Init 1 */

/** Common config
*/
hadc1.Instance = ADC1;
hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1;
hadc1.Init.Resolution = ADC_RESOLUTION_14B;
hadc1.Init.GainCompensation = 0;
hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
hadc1.Init.LowPowerAutoWait = DISABLE;
hadc1.Init.ContinuousConvMode = DISABLE;
hadc1.Init.NbrOfConversion = 1;
hadc1.Init.DiscontinuousConvMode = DISABLE;
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
hadc1.Init.DMAContinuousRequests = DISABLE;
hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;
hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE;
hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR;
hadc1.Init.OversamplingMode = DISABLE;
if (HAL_ADC_Init(&amp;hadc1) != HAL_OK)
{
    Error_Handler();
}

/** Configure Regular Channel
*/
sConfig.Channel = ADC_CHANNEL_3;
sConfig.Rank = ADC_REGULAR_RANK_1;
sConfig.SamplingTime = ADC_SAMPLETIME_5CYCLE;
sConfig.SingleDiff = ADC_SINGLE_ENDED;
sConfig.OffsetNumber = ADC_OFFSET_NONE;
sConfig.Offset = 0;
if (HAL_ADC_ConfigChannel(&amp;hadc1, &amp;sConfig) != HAL_OK)
{
    Error_Handler();
}
/* USER CODE BEGIN ADC1_Init 2 */

/* USER CODE END ADC1_Init 2 */

}

/**
* @brief DAC1 Initialization Function
* @param None
* @retval None
*/
static void MX_DAC1_Init(void)
{

/* USER CODE BEGIN DAC1_Init 0 */

/* USER CODE END DAC1_Init 0 */

DAC_ChannelConfTypeDef sConfig = {0};
DAC_AutonomousModeConfTypeDef sAutonomousMode = {0};

/* USER CODE BEGIN DAC1_Init 1 */

/* USER CODE END DAC1_Init 1 */

/** DAC Initialization
*/
hdac1.Instance = DAC1;
if (HAL_DAC_Init(&amp;hdac1) != HAL_OK)
{
    Error_Handler();
}

/** DAC channel OUT1 config
*/
sConfig.DAC_HighFrequency = DAC_HIGH_FREQUENCY_INTERFACE_MODE_DISABLE;
sConfig.DAC_DMADoubleDataMode = DISABLE;
sConfig.DAC_SignedFormat = DISABLE;
sConfig.DAC_SampleAndHold = DAC_SAMPLEANDHOLD_DISABLE;
sConfig.DAC_Trigger = DAC_TRIGGER_NONE;
sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;
sConfig.DAC_ConnectOnChipPeripheral = DAC_CHIPCONNECT_EXTERNAL;
sConfig.DAC_UserTrimming = DAC_TRIMMING_FACTORY;
if (HAL_DAC_ConfigChannel(&amp;hdac1, &amp;sConfig, DAC_CHANNEL_1) != HAL_OK)
{
    Error_Handler();
}

/** Configure Autonomous Mode
*/
sAutonomousMode.AutonomousModeState = DAC_AUTONOMOUS_MODE_DISABLE;
if (HAL_DACEx_SetConfigAutonomousMode(&amp;hdac1, &amp;sAutonomousMode) != HAL_OK)
{
    Error_Handler();
}
/* USER CODE BEGIN DAC1_Init 2 */

/* USER CODE END DAC1_Init 2 */

}

/**
* @brief ICACHE Initialization Function
* @param None
* @retval None
*/
static void MX_ICACHE_Init(void)
{

/* USER CODE BEGIN ICACHE_Init 0 */

/* USER CODE END ICACHE_Init 0 */

/* USER CODE BEGIN ICACHE_Init 1 */

/* USER CODE END ICACHE_Init 1 */

/** Enable instruction cache in 1-way (direct mapped cache)
*/
if (HAL_ICACHE_ConfigAssociativityMode(ICACHE_1WAY) != HAL_OK)
{
    Error_Handler();
}
if (HAL_ICACHE_Enable() != HAL_OK)
{
    Error_Handler();
}
/* USER CODE BEGIN ICACHE_Init 2 */

/* USER CODE END ICACHE_Init 2 */

}

/**
* @brief TIM6 Initialization Function
* @param None
* @retval None
*/
static void MX_TIM6_Init(void)
{

/* USER CODE BEGIN TIM6_Init 0 */

/* USER CODE END TIM6_Init 0 */

TIM_MasterConfigTypeDef sMasterConfig = {0};

/* USER CODE BEGIN TIM6_Init 1 */

/* USER CODE END TIM6_Init 1 */
htim6.Instance = TIM6;
htim6.Init.Prescaler = 1000;
htim6.Init.CounterMode = TIM_COUNTERMODE_UP;
htim6.Init.Period = 65535;
htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&amp;htim6) != HAL_OK)
{
    Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&amp;htim6, &amp;sMasterConfig) != HAL_OK)
{
    Error_Handler();
}
/* USER CODE BEGIN TIM6_Init 2 */
HAL_TIM_Base_Start_IT(&amp;htim6);        //�?????启定时器中断,在main函数里面初始�?????
/* USER CODE END TIM6_Init 2 */

}

/**
* @brief TIM7 Initialization Function
* @param None
* @retval None
*/
static void MX_TIM7_Init(void)
{

/* USER CODE BEGIN TIM7_Init 0 */

/* USER CODE END TIM7_Init 0 */

TIM_MasterConfigTypeDef sMasterConfig = {0};

/* USER CODE BEGIN TIM7_Init 1 */

/* USER CODE END TIM7_Init 1 */
htim7.Instance = TIM7;
htim7.Init.Prescaler = 10;
htim7.Init.CounterMode = TIM_COUNTERMODE_UP;
htim7.Init.Period = 65535;
htim7.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&amp;htim7) != HAL_OK)
{
    Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&amp;htim7, &amp;sMasterConfig) != HAL_OK)
{
    Error_Handler();
}
/* USER CODE BEGIN TIM7_Init 2 */
HAL_TIM_Base_Start_IT(&amp;htim7);        //
/* USER CODE END TIM7_Init 2 */

}

/**
* @brief UCPD1 Initialization Function
* @param None
* @retval None
*/
static void MX_UCPD1_Init(void)
{

/* USER CODE BEGIN UCPD1_Init 0 */

/* USER CODE END UCPD1_Init 0 */

LL_GPIO_InitTypeDef GPIO_InitStruct = {0};

/* Peripheral clock enable */
LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_UCPD1);

LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB);
LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA);
/**UCPD1 GPIO Configuration
PB15   ------&gt; UCPD1_CC2
PA15 (JTDI)   ------&gt; UCPD1_CC1
*/
GPIO_InitStruct.Pin = LL_GPIO_PIN_15;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
LL_GPIO_Init(GPIOB, &amp;GPIO_InitStruct);

GPIO_InitStruct.Pin = LL_GPIO_PIN_15;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
LL_GPIO_Init(GPIOA, &amp;GPIO_InitStruct);

/* USER CODE BEGIN UCPD1_Init 1 */

/* USER CODE END UCPD1_Init 1 */
/* USER CODE BEGIN UCPD1_Init 2 */

/* USER CODE END UCPD1_Init 2 */

}

/**
* @brief USART1 Initialization Function
* @param None
* @retval None
*/
static void MX_USART1_UART_Init(void)
{

/* USER CODE BEGIN USART1_Init 0 */

/* USER CODE END USART1_Init 0 */

/* USER CODE BEGIN USART1_Init 1 */

/* USER CODE END USART1_Init 1 */
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&amp;huart1) != HAL_OK)
{
    Error_Handler();
}
if (HAL_UARTEx_SetTxFifoThreshold(&amp;huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
{
    Error_Handler();
}
if (HAL_UARTEx_SetRxFifoThreshold(&amp;huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
{
    Error_Handler();
}
if (HAL_UARTEx_DisableFifoMode(&amp;huart1) != HAL_OK)
{
    Error_Handler();
}
/* USER CODE BEGIN USART1_Init 2 */
HAL_UART_Receive_IT(&amp;huart1, (uint8_t *)rx1_buff, 1);
/* USER CODE END USART1_Init 2 */

}

/**
* @brief USB_OTG_HS Initialization Function
* @param None
* @retval None
*/
static void MX_USB_OTG_HS_HCD_Init(void)
{

/* USER CODE BEGIN USB_OTG_HS_Init 0 */

/* USER CODE END USB_OTG_HS_Init 0 */

/* USER CODE BEGIN USB_OTG_HS_Init 1 */

/* USER CODE END USB_OTG_HS_Init 1 */
hhcd_USB_OTG_HS.Instance = USB_OTG_HS;
hhcd_USB_OTG_HS.Init.Host_channels = 16;
hhcd_USB_OTG_HS.Init.speed = HCD_SPEED_HIGH;
hhcd_USB_OTG_HS.Init.dma_enable = DISABLE;
hhcd_USB_OTG_HS.Init.phy_itface = USB_OTG_HS_EMBEDDED_PHY;
hhcd_USB_OTG_HS.Init.Sof_enable = DISABLE;
hhcd_USB_OTG_HS.Init.low_power_enable = DISABLE;
hhcd_USB_OTG_HS.Init.use_external_vbus = ENABLE;
if (HAL_HCD_Init(&amp;hhcd_USB_OTG_HS) != HAL_OK)
{
    Error_Handler();
}
/* USER CODE BEGIN USB_OTG_HS_Init 2 */

/* USER CODE END USB_OTG_HS_Init 2 */

}

/**
* @brief GPIO Initialization Function
* @param None
* @retval None
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
/* USER CODE BEGIN MX_GPIO_Init_1 */
/* USER CODE END MX_GPIO_Init_1 */

/* GPIO Ports Clock Enable */
__HAL_RCC_GPIOC_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_GPIOG_CLK_ENABLE();

/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(LED_RED_GPIO_Port, LED_RED_Pin, GPIO_PIN_RESET);

/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin, GPIO_PIN_RESET);

/*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, UCPD_DBn_Pin|LED_BLUE_Pin, GPIO_PIN_RESET);

/*Configure GPIO pin : USER_BUTTON_Pin */
GPIO_InitStruct.Pin = USER_BUTTON_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(USER_BUTTON_GPIO_Port, &amp;GPIO_InitStruct);

/*Configure GPIO pin : UCPD_FLT_Pin */
GPIO_InitStruct.Pin = UCPD_FLT_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(UCPD_FLT_GPIO_Port, &amp;GPIO_InitStruct);

/*Configure GPIO pin : LED_RED_Pin */
GPIO_InitStruct.Pin = LED_RED_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_RED_GPIO_Port, &amp;GPIO_InitStruct);

/*Configure GPIO pin : LED_GREEN_Pin */
GPIO_InitStruct.Pin = LED_GREEN_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(LED_GREEN_GPIO_Port, &amp;GPIO_InitStruct);

/*Configure GPIO pins : UCPD_DBn_Pin LED_BLUE_Pin */
GPIO_InitStruct.Pin = UCPD_DBn_Pin|LED_BLUE_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(GPIOB, &amp;GPIO_InitStruct);

/* USER CODE BEGIN MX_GPIO_Init_2 */
/* USER CODE END MX_GPIO_Init_2 */
}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
* @briefThis function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void)
{
/* USER CODE BEGIN Error_Handler_Debug */
/* User can add his own implementation to report the HAL error return state */
__disable_irq();
while (1)
{
}
/* USER CODE END Error_Handler_Debug */
}

#ifdefUSE_FULL_ASSERT
/**
* @briefReports the name of the source file and the source line number
*         where the assert_param error has occurred.
* @paramfile: pointer to the source file name
* @paramline: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t *file, uint32_t line)
{
/* USER CODE BEGIN 6 */
/* User can add his own implementation to report the file name and line number,
   ex: printf(&quot;Wrong parameters value: file %s on line %d\r\n&quot;, file, line) */
/* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */</code></pre>

<p>&nbsp;</p>
</div>

<div><strong>七、编译下载程序,</strong><strong>连接串口,输入命令,检查PA4电压&nbsp; 这里是asc码和hex码转换了的</strong></div>

<div></div>

<div>分别对应电压为(因为第五个命令数据超过4096了 是5000,所以电压高位被截除了):</div>

<div>0.812、1.623、2.435、3.246、0.735</div>

<div>数据基本上是准确的。</div>

<div>&nbsp;</div>

<div><strong>八、演示结果</strong></div>

<div>f19e3235f679a8f2b12d25fe64f347c3<br />
&nbsp;</div>

<div>谢谢支持</div>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

Jacktang 发表于 2024-3-10 15:10

<p>&nbsp;楼主一边干活一边听的什么文艺节目<img height="52" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/wanwan05.gif" width="48" /></p>

lugl4313820 发表于 2024-3-10 16:34

<p>版主边工作边学娱乐,那是真的开心呀。大家对你的背景太感兴趣了。</p>

damiaa 发表于 2024-3-10 21:50

lugl4313820 发表于 2024-3-10 16:34
版主边工作边学娱乐,那是真的开心呀。大家对你的背景太感兴趣了。

<p>那边在放电视,这边在试板子。 两边互相干扰<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/smile.gif" width="48" /></p>

damiaa 发表于 2024-4-7 09:08

Jacktang 发表于 2024-3-10 15:10
&nbsp;楼主一边干活一边听的什么文艺节目

<p>感谢支持!</p>
页: [1]
查看完整版本: 【ST NUCLEO-U5A5ZJ-Q开发板测评】6 程序中加入DAC