layout: post
title: 蓝桥杯备赛
categories: 日志
tags:
- 比赛
- 大二
BGImage: 'https://github.xutongxin.me/https://raw.githubusercontent.com/xutongxin1/PictureBed/master/img0/20220310123346.png'
jekyll-theme-WuK:
musicid: '34367899'
单独开一份文章,为我复习pwm做准备
PWM频率:
Fpwm =Tclk / ((arr+1)*(psc+1))(单位:Hz)
- arr 是计数器值
- psc 是预分频值
占空比:
- duty circle = TIM3->CCR1 / arr(单位:%)
- TIM3->CCR1 用户设定值
比如 定时器频率Tclk = 72Mhz arr=499 psc=71 那么PWM频率就是720000/500/72= 2000Hz,即2KHz
arr=499,TIM3->CCR1=250 则pwm的占空比为50%
改CCR1可以修改占空比,修改arr可以修改频率
重载计数器原理
若配置脉冲计数器TIMx_CNT为向上计数,而重载寄存器TIMx_ARR配置为N,即TIMx_CNT的当前计数值数值X在TIMxCLK时钟源的驱动下不断累加,当TIMx_CNT的数值X大于N时,会重置TIMx_CNT数值为0重新计数。
而在TIMxCNT计数的同时,TIMxCNT的计数值X会与比较寄存器TIMx_CCR预先存储了的数值A进行比较,当脉冲计数器TIMx_CNT的数值X小于比较寄存器TIMx_CCR的值A时,输出高电平(或低电平),相反地,当脉冲计数器的数值X大于或等于比较寄存器的值A时,输出低电平(或高电平)。
如此循环,得到的输出脉冲周期就为重载寄存器TIMx_ARR存储的数值(N+1)乘以触发脉冲的时钟周期,其脉冲宽度则为比较寄存器TIMx_CCR的值A乘以触发脉冲的时钟周期,即输出PWM的占空比为A/(N+1)。
记得PWM启动需要一个函数
定时器工作
定时器周期
TCLK=72MHZ
如TOUT=(5000*7200)/72 us = 500ms
在main.c主函数上方初始化使能定时器2
/* USER CODE BEGIN 2 */
/*使能定时器中断*/
HAL_TIM_Base_Start_IT(&htim2);
/* USER CODE END 2 */
在main.c主函数下方添加中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static unsigned char ledState = 0;
if (htim == (&htim2))
{
if (ledState == 0)
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_RESET);
else
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_15,GPIO_PIN_SET);
ledState = !ledState;
}
}
I2C实质
i2c设备数量理论无限,但是电阻加大会让信号衰减
发送8个数据,然后等待ack,如果拉低就正常发出,否则就是异常了
蓝桥杯使用的是IO口模拟i2c
ADC实质
https://blog.csdn.net/as480133937/article/details/99627062
R1-R15寄存器
每个通道都有3个事件标志(DMA半传输、DMA传输完成和DMA传输出错)
每个 AD 通道可以配置独立的采样时间
备份寄存器(BKP)应用
不可用于启动程序
ARM Cortex M3 使用Thumb-2 指令集
STM32 IO 端口寄存器必须以 32 位字的方式访问
Cortex-M3 处理器可以使用 2 个堆栈,不是4个
在 STM32 处理器中一个 DMA 请求,至少占用8个周期的 CPU 访问系统总线
时间
N 个触发器构成的计数器中,有效状态最多有2^N
STM32F103RBT6可采用( )位来编辑中断优先级。答案:4