【备战蓝桥杯】考前快速大纲

ADC采集

  1. CubeMX配置
    比如题目要求使用R37来调节输出的占空比(14th省赛),那就需要用到ADC采集。
    在这里插入图片描述
    在这里插入图片描述
  2. 代码
double getADC(ADC_HandleTypeDef *hadc)
{
   
	unsigned int value = 0;
	//开启转换ADC并且获取值
	HAL_ADC_Start(hadc);
	value = HAL_ADC_GetValue(hadc);
	//ADC值的转换 3.3V是电压 4096是ADC的精度为12位也就是2^12=4096
	return value*3.3/4096;
}

ADC的hal库函数在 stm32g4xx_hal_adc.h拉到最后。
在这里插入图片描述

输入捕获

  1. CubeMX配置
    开启定时器某一个通道的“输入直接比较”模式。
    在这里插入图片描述
  2. 代码
    比如题目要求“通过PA7来测量输入信号的频率”(14th省赛)。
/* 定时器回调函数*/
uint16_t f = 0;
// 保存TIMx_CCR的值
uint32_t  cclValue = 0;
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
   
//	// 保存TIMx_CCR的值
//	uint32_t  cclValue = 0;
	// 定时器3时执行该段
	if(htim->Instance == TIM3)
	{
   
		cclValue = __HAL_TIM_GET_COUNTER(&htim3);
		__HAL_TIM_SetCounter(&htim3, 0);
		f = 1000000 / cclValue;
		HAL_TIM_IC_Start_IT(&htim3, TIM_CHANNEL_2); // 这里使用中断,而非轮询方法
	}
}

  1. 定时功能
    插播一下,比如题目要求“保持时间超过2s的输入信号才纳入统计”,那需要定时器来实现2s定时。
    使用刚才那个定时器3,把它的内部时钟源打开。
    在这里插入图片描述
    在stm32g4xx_it.c 中找到 tim3的句柄。
void TIM3_IRQHandler(void)
{
   
  /* USER CODE BEGIN TIM3_IRQn 0 */

  /* USER CODE END TIM3_IRQn 0 */
  HAL_TIM_IRQHandler(&htim3);
  /* USER CODE BEGIN TIM3_IRQn 1 */
	if(sysCount[2] < 2000) // 既然tim3已经配置好了是1Hz,那就计数2k次来表示2s
	sysCount[2]++;
  /* USER CODE END TIM3_IRQn 1 */
}

eeprom读写(IIC通信)

EEPROM可以简单理解为是一个掉电不丢失的存储模块,相对于g431,它是一个从机,所以呢,需要用软件IIC来进行主从机的通信。

  1. CubeMX配置
    先将官方资源包里的“i2c - hal.c”和“i2c - hal.h”复制到我们的工程目录下,可以看到里面已经对 PB6 和PB7 做好了初始化,那就将PB6、PB7配置为输出(相当于IIC通信中的SCL和SDA线)。
    另外,题目要求“电压参数写入E2PROM内部地址0,频率参数写入E2PROM内部地址1”(13th国赛),根据E2PROM手册对每一位对应解读,其bit0为R/W,bit3-1为从机地址。
  2. 代码
/***************************************
* 函数功能:读取eeprom相应位置的值
* 函数参数:unsigned char ucAddr:读取的地址
* 函数返回值:ucRes:读取到的值
***************************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值