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(

相关推荐

  1. 2023第十C++B组题目解析

    2024-04-01 19:48:04       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-01 19:48:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-01 19:48:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-01 19:48:04       82 阅读
  4. Python语言-面向对象

    2024-04-01 19:48:04       91 阅读

热门阅读

  1. 如何利用ChatGPT提升学术研究的效率

    2024-04-01 19:48:04       40 阅读
  2. UML统一建模语言

    2024-04-01 19:48:04       39 阅读
  3. 拉普拉斯变换

    2024-04-01 19:48:04       41 阅读
  4. JQuery入门基础

    2024-04-01 19:48:04       46 阅读
  5. 组件 v-model

    2024-04-01 19:48:04       40 阅读
  6. HashMap 的扩容因子为什么是 0.75?

    2024-04-01 19:48:04       40 阅读
  7. Spring整合JDBC

    2024-04-01 19:48:04       35 阅读
  8. 元胞自动机(matlab)

    2024-04-01 19:48:04       33 阅读