i. 由于我的需求只跟高电平宽度有关,所以避免了使用 PWM 输入模式,这样可以每个管脚捕捉一路信号。如果
使用 PWM 模式,每一路需要占用两个寄存器,所以一个定时器只能同时使用两路 PWM 输入。
ii. 由于捕捉需要触发启动定时器,所以 PWM 输出与捕捉不容易在同一个 TIM 通道上实现。如果必须的话只能 增加计数溢出的相关代码。
iii. 有些程序省略了捕捉通道的初始化代码,这是不对的
iv. 在基本计时器初始化代码里面注意选择适当的计数器长度,最好让波形长度不要长于一个计数周期,否则需 要增加溢出代码很麻烦。一个计数周期的长度计算跟如下几个参数有关:
(1) RCC 初始化代码里面的 RCC_PCLKxConfig,这是 TIM 的基础时钟源与系统时钟的关系。
(2) TIM 初始化的 TIM_Period,这是计数周期的值
(3) TIM 初始化的 TIM_Prescaler,这是计数周期的倍频计数器,相当于调节计数周期,可以使 TIM_Period 尽 量大,提高计数精度。
STM32笔记之十二:时钟不息工作不止,systic 时钟应用
a) 目的:使用系统时钟来进行两项实验——周期执行代码与精确定时延迟。
b) 初始化函数定义:
void SysTick_Configuration(void);
c) 初始化函数调用:
SysTick_Configuration();
d) 初始化函数:
void SysTick_Configuration(void)
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//时钟除8
SysTick_SetReload(250000); //计数周期长度
Tic_Val++;//变量递增
vi. 调用代码:Tic_Delay(10); //精确延时
vii. 疑问:如果去掉计时行那个没用的 printf("");函数将停止工作,这个现象很奇怪
STM32笔记之十三:恶搞,两只看门狗 a) 目的: 了解两种看门狗(我叫它:系统运行故障探测器和独立系统故障探测器,新手往往被这个并不形象的象形名称搞糊涂)
之间的区别和基本用法。
b) 相同: 都是用来探测系统故障,通过编写代码定时发送故障清零信号(高手们都管这个代码叫做“喂狗”),告诉它系统运行正常。
一旦系统故障,程序清零代码(“喂狗”)无法执行,其计数器就会计数不止,直到记到零并发生故障中断(狗饿了开始 叫唤),控制 CPU 重启整个系统(不行啦,开始咬人了,快跑……)。
c) 区别:
独立看门狗 Iwdg——我的理解是独立于系统之外,因为有独立时钟,所以不受系统影响的系统故障探测器。(这条狗是 借来的,见谁偷懒它都咬!)主要用于监视硬件错误。
窗口看门狗 wwdg——我的理解是系统内部的故障探测器,时钟与系统相同。如果系统时钟不走了,这个狗也就失去作 用了。(这条狗是老板娘养的,老板不干活儿他不管!)主要用于监视软件错误。
d) 初始化函数定义:鉴于两只狗作用差不多,使用过程也差不多初始化函数栓一起了,用的时候根据情况删减。
STM32笔记之十四:基本问题,来讨论一下软件架构
网上大家都在讨论和学习,但是对于架构这个基本问题却没几个人讨论。个人认为有个好的架构是写好代码的基础,可 以使后期的调式工作事半功倍!!
1、 架构组成:我的程序代码分为四种结构 a) 顺序执行代码 定义:按照顺序逐行执行的代码 优点:是思路简单,代码可靠不易被干扰。 缺点:占用资源
用途:只用来各种变量、函数的定义,硬件的初始化程序 位置:main.c 的开始一直到 main 函数的 while 函数之前
b) 空闲执行代码
定义:在 CPU 空闲的时候才执行的代码 优点:不占用资源 缺点:执行的实时性不能保证
用途:非实时任务,调试信息输出,不重要的状态指示 位置:main.c 的 main 函数的 while 函数内部
c) 中断执行代码 定义:由软硬件事件打断整个程序而执行的代码 优点:可以保证实时性,各种中断可以安排优先顺序 缺点:关系相对复杂,互相之间容易干扰 用途:触发性的代码,比如接收数据,响应外部设备,按钮的相应 位置:stm32f10x_it.c 内部