2024蓝桥杯嵌入式复习笔记--基础知识-模块使用-近四届题目代码实现

2024蓝桥杯嵌入式复习笔记–基础知识-模块使用-近四届题目代码实现

源码实现以及代码思路

芯片基础知识(比赛的话不需要太了解)

image-20240310185552935

外设(需要重点关注)

GPIO

输入输出模式

image-20240310192643548

复用

image-20240310191433902

这一个表是数据手册里面的4.11

引脚的复用, 比如使用PA9作为USART_TX的时候, 把他配置为AF7

image-20240310191637675

这一个是参考手册里面的9.4

使用这一个寄存器配置实际的复用功能

image-20240310191823289

通用定时器

G4的通用定时器有好几种模式, 主要的区别是可以使用的通道的数量

image-20240311165053944

image-20240311165022510

image-20240311164957100

定时功能

使用定时器的时候使用HAL_TIM_Base_Start();HAL_TIM_Base_Start_IT();HAL_TIM_Base_Start_DMA();进行开启

可以使用函数HAL_TIM_Base_GetState();获取时钟的状态

使用__HAL_TIM_GET_COUNTER()获取计数器的值, __HAL_TIM_SET_COUNTER()进行设置

使用__HAL_TIM_GET_AUTORELOAD()获取这一个时钟的自动重装载值, 使用这一个时候最好打开影子寄存器

image-20240312230937476

__HAL_TIM_SET_PRESCALER()处理预分频值

PWM

使用这一个模式的时候, 先在对应的引脚选择一个定时器的通道

image-20240311173239988

image-20240311173308458

image-20240311174210763

代码使用的时候需要打开PWM, 使用函数HAL_TIM_PWM_Start();

输入捕获

image-20240311194546528

image-20240311194442648

实际捕获的时候使用HAL_TIM_IC_Start_IT()开启这一个捕获

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim){
   
	if(htim->Instance == TIM17){
   
		curr_val = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
		__HAL_TIM_SET_COUNTER(htim, 0);
		frq = (80000000 / 80) / curr_val;
		HAL_TIM_IC_Start_IT(htim, TIM_CHANNEL_1);
	}
}

使用这一个计算PWM的频率

如果要捕获占空比, 可以使用一个定时器的两个通道, 这两个通道捕获不同的边沿, 之后通过捕获时间的比例获取这一个PWM的占空比

image-20240311202141971

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim){
   
	if(htim->Instance == TIM17){
   
		curr_val = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
		__HAL_TIM_SET_COUNTER(htim, 0);
		frq = (80000000 / 80) / curr_val;
		HAL_TIM_IC_Start_IT(htim, TIM_CHANNEL_1);
	}
	if(htim->Instance == TIM8){
   
		if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1){
   
			rise = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
			fall = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2);
			__HAL_TIM_SET_COUNTER(htim, 0);
			duty = 100 * fall / rise;
			HAL_TIM_IC_Start_IT(htim, TIM_CHANNEL_1);
			HAL_TIM_IC_Start_IT(htim, TIM_CHANNEL_2);
		}
	}
}

ADC

  • 扫描模式: 使用STM32CUBEMX配置了多通道后,这一项默认开启且无法设置成关闭。这个模式就是自动扫描你开启的所有通道进行转换,直至转换完。例如你开启了CH0、CH1、CH2、CH3这四个通道,启动转换后ADC会自动将这4个通道全部转换完,但是这种连续性是可以被打断的,所以就引出了间断模式。

  • 连续模式: 在CUBE中选中ENABLE就是连续模式,DISABLE就是单次模式。开启连续模式后,ADC的转换不由其他控制。例如将ADC设置为了定时器的TGRO触发采样,如果开启连续模式,ADC将忽略定时器的触发采样。(连续转换模式开启后其实就是满频率的采样)。

  • 间断模式: 可以将多个通道进行分组采集,例如你开启了CH0~3这4个通道,假如你设置了间断次数为4,就相当于将4个通道分成了4组,每组1个通道,那么要想采集完这4个通道就需要手动触发4次ADC采集;如果设置了间断次数为2,那么采集完4个通道就需要手动触发2次ADC采集。

单通道

image-20240311212818189

double get_adc(
  • 13
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值