时钟系统:
构成:
1.振荡器——脉搏
RC振荡器
晶体振荡器
四种:HSE,HSI,LSE,LSI
2.唤醒定时器
3.PLL倍频器
4.各种分频器
可以通过stm32cubemx进行时钟配置,但是在SystemClock_Config()函数前,在启动文件中有默认的时钟配置。
while (1) { HAL_GPIO_WritePin(GPIOC,LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin,GPIO_PIN_RESET); mydelay(1000); HAL_GPIO_WritePin(GPIOC,LED1_Pin|LED2_Pin|LED3_Pin|LED4_Pin,GPIO_PIN_SET); mydelay(1000);
定时器:能够实现定时和计数
HAL_Delay()的实现:
使用hal库时,发现__weak修饰符:该修饰符的函数被称为弱函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,那么编译器就会执行__weak 声明的函数,并且编译器不会报错。
缺陷:在中断服务函数中使用HAL_Delay会引起混乱,因为HAL_Delay是通过中断方式实现的,而Systick的中断一般操作系统优先级最低,所以在中断中运行HAL_Delay会导致死锁的现象。
定时器:
APB1和APB2上挂了很多不同的定时器,需要注意。
计时时间为1/(TIM * CLK/(PSC+1))*(ARR+1)
所以定时器需要配置PSC预分频器和自动重载寄存器ARR。
输入捕获和输出比较:输入捕获可以检测外部引脚电平的变化,输出比较用来控制一个输出波形。
实验:利用基础定时器实现定时1m中断,并在中断处理函数中打印输出字符。
stm32f103zet6的APB1和APB2都是72mhz。
使能定时器中断。
高级定时器:
定时器通道:
查看了手册,跟我用的pz6806l的led对应的是TIM3的ch1-ch2,复用的管脚为PC6-PC7。
输入捕获:外部管脚,可用于测量频率或者电平持续时间。
实验:捕获按键按下后低电平持续的时间
看门狗:
独立看门狗IWDG:监控系统是否出现故障,将系统复位。
关键字寄存器IWDG_KR:喂狗,修改重装载寄存器,启动IWDG
采用LSI时钟,在低电压情况下也能工作。
实验:按下按钮就喂狗,不按下则复位
if(HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)==GPIO_PIN_RESET){ HAL_IWDG_Refresh(&hiwdg); }
窗口看门狗WWDG:检测软件故障。
可以配置时间窗,检测应用程序非预期中的运行流程。
复位条件:1.自减计数器小于0x40
2. 喂狗时间大于上窗口的值
因此必须在时间窗口中喂狗,其余时间喂狗均会复位。
此页面的语言为中文(简体) 翻译为
- 中文(简体)
- 中文(繁体)
- 丹麦语
- 乌克兰语
- 乌尔都语
- 亚美尼亚语
- 俄语
- 保加利亚语
- 克罗地亚语
- 冰岛语
- 加泰罗尼亚语
- 匈牙利语
- 卡纳达语
- 印地语
- 印尼语
- 古吉拉特语
- 哈萨克语
- 土耳其语
- 威尔士语
- 孟加拉语
- 尼泊尔语
- 布尔语(南非荷兰语)
- 希伯来语
- 希腊语
- 库尔德语
- 德语
- 意大利语
- 拉脱维亚语
- 挪威语
- 捷克语
- 斯洛伐克语
- 斯洛文尼亚语
- 旁遮普语
- 日语
- 普什图语
- 毛利语
- 法语
- 波兰语
- 波斯语
- 泰卢固语
- 泰米尔语
- 泰语
- 海地克里奥尔语
- 爱沙尼亚语
- 瑞典语
- 立陶宛语
- 缅甸语
- 罗马尼亚语
- 老挝语
- 芬兰语
- 英语
- 荷兰语
- 萨摩亚语
- 葡萄牙语
- 西班牙语
- 越南语
- 阿塞拜疆语
- 阿姆哈拉语
- 阿尔巴尼亚语
- 阿拉伯语
- 韩语
- 马尔加什语
- 马拉地语
- 马拉雅拉姆语
- 马来语
- 马耳他语
- 高棉语