当前位置: 首页 > article >正文

STM32U575RIT6单片机(五)

作业1:实验多通道采集芯片VBAT电压和内部温度(ADC4)。

/* USER CODE BEGIN WHILE */	
  HAL_PWREx_EnableVddA();			//1、开启电压域
  HAL_ADCEx_Calibration_Start(&hadc4,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED);		//2、开启ADC校准
  float ADC_buff[2];
while (1)
{
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_ADC_Start(&hadc4);			//3、开启ADC采样
		for(int i=0;i<2;i++)
		{
			HAL_ADC_PollForConversion(&hadc4,100);	//4、等待100msADC转化完成
			ADC_buff[i] = HAL_ADC_GetValue(&hadc4);		//5、获取DR寄存器的值
		}
		HAL_ADC_Stop(&hadc4);		//6、停止采样
		//电压
		ADC_buff[1] = (ADC_buff[1]*3.3)/4095;		//转换为标准电压
		//温度
		ADC_buff[0] = (((ADC_buff[0]*3.3)/4095)*1000-685)/2.5;
		printf("Vbat: %.2f V\nTbat: %.2f degC\n",ADC_buff[1]*4,ADC_buff[0]);			//输出采样结果
		HAL_Delay(1000);
  }
  /* USER CODE END 3 */
}

作业2:PWM实现, 通过旋转旋钮, 控制蜂鸣器/马达/风扇的运行频率。
读取旋钮的值,将值分为多个等份,判断每个等份后设置比较寄存器的值。

  /* USER CODE BEGIN WHILE */
	HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
	HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2);
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_PWREx_EnableVddA();//开启电压必须要有
		HAL_ADCEx_Calibration_Start(&hadc1,ADC_CALIB_OFFSET,ADC_SINGLE_ENDED);
		HAL_ADC_Start(&hadc1);
		HAL_ADC_PollForConversion(&hadc1,100);//等待ADC转换100毫秒
		uint32_t val = HAL_ADC_GetValue(&hadc1);//获取ADC转换后的值
		val = ((val*1.0000)-20)/7.406;
		double pwm = 0.00;
		pwm = (val*1.0000)/2000*100;
		printf("PWM = %.2f%%\n",pwm);
		__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,val);
		__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,val);
		__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,val);
		HAL_Delay(500);
		HAL_ADC_Stop(&hadc1);//关闭ADC
  }
  /* USER CODE END 3 */
}

作业3:显示一个动图

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_SPI1_Init();
  MX_ICACHE_Init();
  /* USER CODE BEGIN 2 */
	ILI9341_Init();	//olcd初始化
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
	ILI9341_Clear(YELLOW);	//清屏
	LCD_picture2();
	HAL_Delay(1000);
	//Gui_DrawFont_GBK16(200,0,RED,YELLOW, (uint8_t*)"China");
	//LCD_gif();
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		LCD_gif();
  }
void LCD_picture1()
{
	uint8_t temp[2] = {};
	//给 ILI9341寄存器 写入 写数据命令
	ILI9341_WR_REG(0x2C);
	//屏幕中, 一个像素点占用两个字节
	uint32_t len = 2*240*320;
	uint32_t i = 0;
	while(i < len)
	{
		temp[0] = gImage_1[i];
		temp[1] = gImage_1[i+1];
		HAL_SPI_Transmit(&hspi1,temp,2,0);
		i = i+2;
	}
}
//1~23
void LCD_gif()
{
	LCD_picture1();
	LCD_picture3();
	LCD_picture5();
	LCD_picture7();
	LCD_picture9();
	LCD_picture11();
	LCD_picture13();
	LCD_picture15();
	LCD_picture17();
	LCD_picture19();
	LCD_picture21();
	LCD_picture23();
}


http://www.kler.cn/a/595842.html

相关文章:

  • Python中数据结构元组详解
  • C++20 新特性:深入理解 `std::basic_string<char8_t>` 和 `char8_t`
  • C# 事件(Event)核心概念
  • 解决npm在vscode终端内无法运行
  • Elasticsearch快速上手与深度进阶:一站式实战教程
  • 什么是ETL
  • 算法 | 优化算法比较
  • 自然语言处理|深入解析 PEGASUS:从原理到实践
  • 字节跳动实习生主导开发强化学习算法,助力大语言模型性能突破
  • 6.5840 Lab 3: Raft
  • react 常用插件
  • 暂存合并分支
  • 【机器学习-模型评估】
  • 老旧中控系统智能化改造方案:基于巨控OPC561Q-C模块实现多通道实时报警
  • 【css酷炫效果】纯CSS实现全屏万花筒效果
  • 八股文MYSQL
  • Centos7部署学之思考试系统
  • 新书速览|云原生Kubernetes自动化运维实践
  • 解决 uniapp 开发中权限申请同步告知目的问题| 华为应用商店上架审核问题解决
  • 初始EBP和ESP的设置