CubeMX 生成 IAR 之 ADC和DAC 配置

一、IAR9.20版本破解后会出现licence manger不是18版本的问题

目前这种情况无法解决,重新下载后也不好使。重新下载低版本的8.40的能够正常使用。

①IAR8.40.1 下载链接 http://files.iar.com/ftp/pub/box/EWARM-CD-8401-21539.exe

②以管理员身份运行IAR的.exe文件   

 ④更改存储地址后进行   “断网”   操作 

⑤在Help中打开License Manager,如下:

⑥选择离线激活

 ⑦打开注册机,下方为附带的注册机链接,选择第二个ARM;IAR破解_免费高速下载|百度网盘-分享无限制

⑧点击左图序列号旁的generate,将生成的序列号复制粘贴到右图的License Number中:

 ⑨选择  NO  然后点击,下一步,选择ActivationInfo.txt的存放路径,下一步;

 

 ⑩在注册机中利用刚才生成的ActivationInfo.txt再生成一个ActivationResponse.txt的文件;

 

 11、注册机中生成的ActivationResponse.txt的文件保存到activate the license中,完成注册。

 

 二、CubeMX配置 adc和dac 详细步骤

1、时钟配置。配置高速外部时钟:

 2、配置ADC1通道。模数转换开启 IN0 (PA0)口和IN1(PA1) 口,打开扫描转换模式、连续转换模式、连续中断请求模式。

 ①选择ADC的转换通道数为 2 ,分别设置通道0 和通道1。

 ②设置DMA

 3、配置DAC通道。OUT1(PA4)端口和OUT2(PA5)端口,设置计时器6触发事件。

 ①设置DMA。设置模式为循环模式。

 4、设置定时器。TIM6采用42分频,计数间隔为10,使能自动重装载。

5、打开串口1。

6、生成IAR文件。不直接打开文件,先打开IAR,在里面打开工程文件。

 

 三、添加代码如下:

 1、串口重定向输出函数。usart.c

/* USER CODE BEGIN 0 */
#include "stdio.h"
/* USER CODE END 0 */


/* USER CODE BEGIN 1 */
int fputc(int ch,FILE *fp){
    HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xff);
    return ch;
}
/* USER CODE END 1 */

2、中断服务程序配置。stm32fxx_it.c

/* External variables --------------------------------------------------------*/
extern DMA_HandleTypeDef hdma_adc1;
extern DMA_HandleTypeDef hdma_dac1;
extern DMA_HandleTypeDef hdma_dac2;
extern DAC_HandleTypeDef hdac;
extern TIM_HandleTypeDef htim6;

/* USER CODE BEGIN EV */
extern uint32_t dac_origin_data[GENERATION_DATA_LEN];
/* USER CODE END EV */


/* USER CODE BEGIN TIM6_DAC_IRQn 0 */  HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_1,dac_origin_data,GENERATION_DATA_LEN,DAC_ALIGN_12B_R);HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_2,dac_origin_data,GENERATION_DATA_LEN,DAC_ALIGN_12B_R);/* USER CODE END TIM6_DAC_IRQn 0 */

 3、主函数配置。main.c

* USER CODE BEGIN PV */
#define GENERATION_DATA_LEN     64

uint32_t adc_origin_data[128]={0};
uint32_t dac_origin_data[GENERATION_DATA_LEN]={2047,2247,2446,2641,2830,3012,3184,3345,3494,3629,3749,3852,3938,4006,4055,4084,4094,4084,4055,4006,3938,3852,3749,3629,3494,3345,3184,3012,2830,2641,2446,2247,2047,1847,1648,1453,1264,1082,910,749,600,465,345,242,156,88,39,10,0,10,39,88,156,242,345,465,600,749,910,1082,1264,1453,1648,1847};
//uint32_t dac_origin_data[GENERATION_DATA_LEN]={0,2048,4095};

/* USER CODE END PV */



/* USER CODE BEGIN 1 */
  int i;
/* USER CODE END 1 */


/* USER CODE BEGIN 2 */
  HAL_TIM_Base_Start_IT(&htim6);
  HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_1,dac_origin_data,GENERATION_DATA_LEN,DAC_ALIGN_12B_R);
  HAL_Delay(100);
  HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_2,dac_origin_data,GENERATION_DATA_LEN,DAC_ALIGN_12B_R);
  
  HAL_ADC_Start_DMA(&hadc1,adc_origin_data,128);
  
/* USER CODE END 2 */


 /* USER CODE BEGIN WHILE */
  while (1)
  {
    if(adc_origin_data[127]!=0){

        for(i=0;i<64;i++){
          printf("adc1 channel 0:%d\r\n",adc_origin_data[i*2]);
          printf("adc1 channel 1:%d\r\n",adc_origin_data[1+(i*2)]);
        }
        printf("==============================\r\n");
        HAL_Delay(1000);
        memset(adc_origin_data,0,sizeof(uint32_t)*128);
        HAL_ADC_Start_DMA(&hadc1,adc_origin_data,128);
    }
    /* USER CODE END WHILE */

猜你喜欢

转载自blog.csdn.net/m0_56769186/article/details/121843022