铁头山羊32基础版笔记 第八章 时钟树梯形为复用器 从多个输入的频率中选一个树根有四个时钟源LS为低速 HS为高速 E为外部 I为内部外部为两个晶振由于内部的时钟源LSI HSI 精度不高所以引入外部的时钟源LSE HSE。L开头的为小树的H为大树的以上为树干部分 有三种选择可以让树根的频率去到SYSCLK此为树枝到了SYSCLK后通过分频器得到不同的想要的频第九章 定时器9.1时基单元9.1.1 时基单元组成部分从时钟过来可能是外部时钟也可能是内部时钟。过来后频率太高了不行所以用预分频器PSC降低频率除以PSC1。然后过来计数器CNT这边每过来一个脉冲就让计数器CNT加1直到和自动重装寄存器ARR的值相等的时候就会发生溢出周期是从0开始到ARR然后再回到0所以周期是ARR1对于高级定时器有一个重复计数器RCR当溢出的次数等于RCR1后就会发生一个update.注update是定时器内部的系统事件信号。触发后会做三件核心事计数器 CNT 清零复位所有预装载寄存器ARR、PSC、CCR比较寄存器、RCR 等的影子寄存器加载到运行寄存器置位UIF更新中断标志位开启中断就会进更新中断服务函数。9.1.2 上计数、下计数、中心对齐上计数用的比较多分辨率记时的最小间隔比如手表就是一秒题目中分频率为1us那么所需时间为1MHZ 时间和频率为反比定时器的输入频率都是72MHZ所以要让PSC分频后变成1MHZ,那么PCS172.所以PSC71溢出周期为1ms1000us 一个最小间隔是1us 这里需要1000个 所以ARR11000 ARR999RCR0,则每溢出一次就会发生update事件9.1.3 寄存器预加载TIMx_ARR 是影子寄存器刚写入的代码会先到影子寄存器里面去但要等到溢出有Update后才会生效到活动寄存器里面。如果没有预加载就会出现这种飘。ARPE0的时候就是无预装载如果有预加载突然改变ARR的值波形也会很快正常。ARPE1的时候就是有预装载9.2 输出比较9.2.1 输出比较简介通过定时器输出精度高的方波信号去驱动外部设备9.2.2 基础工作原理PWM占空比为高电平输出的周期和总周期的比值CCR比较寄存器假设给CCR赋值3CCR的脉冲为2比CCR低的包括本身即为0-2脉冲数量为高电平高的3-9)为低电平,那么占空比就为30%。如果改变CCR的值那么就可以得到不同占空比从而产生不同的PWM的值。9.2.3 8种工作模式重点学习PWM1 这8种都是通过CNT和CCR两个的脉冲数量的比较来得出的了解Frozen冻结 如果一开始输出的是高电压那么就是一直是高电压 如果一开始输出是低电压那么就是一直都是低电压和CNT与CCR的比较没任何关系所以叫做冻结相等输出为高 不相等输出为低相等输出为低 不相等输出为高每次相等的时候翻转电压类型9.2.4 互补输出刚刚的8种模式输出来的我们叫做0CxRef 如果是正常输出那么就是输出的波形和0CxRef相同如果是互补输出就是和其相反以上为互补输出的一个例子Sw1和SW2只能开一个 一个是充电一个是放电 正好用正常PWM和互补PWM控制9.2.5 极性选择三角形和小圆这个是反相器 两个可以抵消 上为高极性下为低极性9.2.6 呼吸灯实验LED 引脚长脚是正极阳极 短脚是负极阴极 -灯珠内部金属片小片接正极大片接负极正表示这个是正常输出正常输出的输出比较通道和互补通道都是使用的AF_pp这块的代码逻辑1打开时钟包括定时器串口和要用的GPOI口2选择定时器时钟源是TIMX3配置定时器的结构体 包括时钟分频一般为不分频计数器计数模式有向上计数和向下计数。一般为向上计数周期值计算ARR的值预分频器的值计算PSC预分频器重复计数器这个是只有高级定时器才有所以一般写04配置CCR相关结构体 包括先给结构体赋一个默认值因为这个结构体里面有很多的东西有些在一般的定时器里面用不到所以为了后续只写需要的部分而不报错对全部先设置默认值。在输出比较的8种模式中选择一种一般选PWM1设置极性是高级性还是低极性9.2.5 极性选择)设置输出使能一般为ENable设置CCR的值计算公式如下PWM的频率时钟输入的频率一般是72MHZ/(PSC1)ARR1PWM的频率1/PWM 周期PWM的占空比CCR/ARR1PWM的分辨率1/ARR1时钟 → PSC 预分频 (输出 1MHz/1μs 脉冲) → CNT 计数器 → ARR 自动重装 → 溢出产生Update 更新信号每一次 Update就是一轮完整 PWM 结束、下一轮开始这个 重复间隔就是 PWM 周期倒数就是 PWM 频率。对应图中黄色的闪电这个部分例题利用PWM信号控制开发板上的指示灯。设置PWM周期为 20 ms占空比为20% 计算PSCARRCCR解答因为缺少分辨率无唯一解STM32 工程标准默认用1μs 分辨率做题计数脉冲频率是指原始时钟频率通过PSC预分频后得到的频率它可以通过1/分辨率来得到那么计数脉冲频率1/10的负6次方1000000所以PSC172000000/100000072PWM的频率1/PWM的周期1/0.0250所以(PSC1)ARR172000000/501440000ARR11440000/7220000CCR20000*20%40005TIM_Cmd 运行控制使能计数器9.3输入捕获9.3.1输入捕获的基本原理捕获上升沿和下降沿当马上出现上升沿时就把这个位置的脉冲数量给到CCR1 也就是2当马上出现下降沿时就把完成下降沿的这个位置给到CCR2 也就是8那么一个脉宽就等于这两个位置的差值乘以分辨率也就是8-266*1us6us通道12是一对 34是一对这样可以节约一个引脚 只用一个硬件就可以解读上升沿和下降沿9.3.2输入捕获的内部结构9.3.3输入滤波滤除频率的细小毛刺9.3.4边沿检测有上升沿下降沿两条路可以出去9.3.5信号选择TRC来自从模式控制器 直接 间接9.3.6分频器如果选择1每出现一个上升沿就会触发事件如果选择4每出现四个上升沿就会触发事件如果选择x每出现x个上升沿就会触发事件一般就用19.4 超声波测距实验9.4.1HCSR-04模块的使用方法9.4.2 搭建电路9.4.3 梳理思路9.4.4 初始化时基单元9.4.5 初始化输入捕获9.4.6编程9.5 从模式控制器第十章 ADC10.1逐渐逼近型ADC10.1.1 ADC是什么把模拟信号转换为数学信号的转换器模拟信号由于在时间上连续所以有无数个点 无法被单片机直接读取。数字信号存在于计算机中 时间离散、幅度也离散 可以被单片机读取10.1.2 单片机里的ADC模块10.1.3 采样深度的概念由于从0000 到 1111 中间有15份 所有4位的ADC就是把0到3.3v分成了15份然后一份就是0.22V如果现在要取一个2V的电压那么用1001b这个二进制和0.22相乘 但是由于这里是4位的ADC所以会产生量化误差 最后只能得到和2v比较接近的1.98V10.1.4 逐次逼近型ADC简介就是用砝码来类比 逐次的放砝码上去后观察天平能不能保持平衡1放上 0取下采样保持电路和电压发生器是两个托盘 模拟信号是未知重量的东西 结果寄存器是可以逐步放入的砝码1放上 0取下和未知重量的东西做比较 比较器是天平的架子10.1.5 采样保持电路不是把模拟信号整体都放到托盘采样保持电路当中而是从模拟信号的无数个点中取一个点来放入当作未知重物的块块。采样保持电路的作用是把那一点的电压输送到比较器前面的时候依旧保持不变电容先充电后保持10.1.6 例子b3是最大的那个砝码 b0是最小的砝码假如模拟信号是2.21v那么先给b3 1 1.76v 不够再给b2 1 1.760.88超过了 所以不能写1 只能写0 现在就回到了1.76再给b1 1 1.760.44不够 所以这个1保留 现在变成了1.760.442.2再给b0 0 2.2加上0.22超过了 所以不能写1 只能写0所以最后我们通过ADC就得出结果 1010也就完成了从模拟信号到输出信号上面的转变从b3往b0去读10.2 ADC模块的结构框图10.2.1 ADC的多路复用只使用一个ADC但是让其去处理多路信号先把模拟信号前面的开关关闭 让ADC把模拟信号转为数字信号 最后放到结果寄存器里面假如每一行都有一个开关 只要关闭开关就可以让这一条路的模拟信号通过ADC转换为数字信号ch0-ch7这些通道 对应PA0到PA7ch8-ch9这些通道 对应PB0到PB1还有通道14和通道15分别是芯片上的温度计和参考电压10.2.2 常规序列可以把常规序列想象成一个计划表 16表示是可以写16条计划像图上这样就是把常规序列中填写上了3条计划当前面的外部触发有一个上升沿出现 那么常规序列就会执行一次10.2.3 注入序列注入序列只能写4条计划但是从单片机串口出来的每一个通道都有单独的结果寄存器 存取数据会更方便10.2.4 例子注入序列的优先级会更高一些 如果注入序列被触发那么就会直接进入注入序列10.3 常规单通道转换