当前位置: 首页 > news >正文

网站错误代码 处理wordpress shopkeeper

网站错误代码 处理,wordpress shopkeeper,企业展厅建筑外观,苗木公司网站模板在前面实验中我们使用到的延时都是通过SysTick进行延时的。 我们知道#xff0c;延时有两种方式#xff1a;软件延时#xff0c;即CPU 循环等待产生的#xff0c;这个延时是不精确的。第二种就是滴答定时器延时#xff0c;本篇博客就来介绍 STM32F4 内部 SysTick 系统定时…         在前面实验中我们使用到的延时都是通过SysTick进行延时的。 我们知道延时有两种方式软件延时即CPU 循环等待产生的这个延时是不精确的。第二种就是滴答定时器延时本篇博客就来介绍 STM32F4 内部 SysTick 系统定时器通过一个简单的 LED 流水灯程序来讲述如何配置 SysTick 系统定时器实现精确延时。学习可以参考《STM32F3 与 F4 系列 Cortex M4 内核编程手册》 4.5 SysTick timer (STK) 章节或者参考库函数中 core_cm4.h 文件 。 目录 一、SysTick 定时器介绍 二、SysTick 定时器操作 2.1 SysTick 定时器寄存器 2.1.1 控制和状态寄存器CTRL 2.1.2  重装载寄存器LOAD 2.1.3 当前数值寄存器VAL 2.1.4  校准数值寄存器CALIB  2.2 系统节拍定时器的工作原理 2.3 SysTick 定时器操作步骤 2.4  使用SysTick 定时器实现精准延时 2.4.1 实现1微秒延时 2.4.2 实现1毫秒延时 2.4.3 实现1秒延时 三、SysTick 定时实验 一、SysTick 定时器介绍 SysTick 定时器也叫 SysTick 滴答定时器它是 Cortex-M4 内核的一个外设 被嵌入在 NVIC 中用来产生SYSTICK异常(异常号:15)。它是一个 24 位向下递减的定时器每计数一次所需时间为 1/SYSTICKSYSTICK 是系统定时器时钟它可以直接取自系统时钟还可以通过系统时钟 8 分频后获取本套程序中我们采用后者即每计数一次所需时间为 1/(168/8)us换句话说在 1us 的时间内会计数 21 次。当定时器计数到 0 时将 从 LOAD 寄存器中自动重装定时器初值重新向下递减计数如此循环往复。如果开启 SysTick 中断的话当定时器计数到 0将产生一个中断信号。如下图所示因此只要知道计数的次数就可以准确得到它的延时时间。 因为 SysTick 是属于 CM4 内核的外设所以所有基于 CM4 内核的单片机都具有这个系统定时器使得软件在 CM4 单片机中可以很容易的移植。系统定时器一般用于操作系统 用于产生时基维持操作系统的心跳。 如何计算延时时间        如果时钟源选择8分频后的即21MHZ那么1秒钟就会计数21000000次计数一次的时间就是1/21000000如此如果想要定时1毫秒就要计数21000次定时1微秒就要计数21次 二、SysTick 定时器操作 在 STM32F4 库函数中并没有提供相应的 SysTick 定时器配置函数我们要操作 SysTick 定时器就需要了解它的寄存器功能。其实 SysTick 定时器寄存器很 简单只有 4 个分别是 CTRL、LOAD、VAL、CALIB在使用 SysTick 产生定时的时候 只需要配置前三个寄存器最后一个校准寄存器不需要使用。对应如下图所示 2.1 SysTick 定时器寄存器 2.1.1 控制和状态寄存器CTRL CTRL 是 SysTick 定时器的控制及状态寄存器。其相应位功能如下 注CLKSOUTCE 位是用于选择 SysTick 定时器时钟来源 如果该位为 1表示其时钟是由系统时钟直接提供即 168M。如果该位为 0表示其时钟是由系统时钟八分频后提供即 168/821M。 2.1.2  重装载寄存器LOAD LOAD 是 SysTick 定时器的重装载数值寄存器。其相应位功能如下 因为 STM32F4 的 SysTick 定时器是一个 24 位递减计数器因此重装载寄存器中只使用到了低 24 位即 bit0-bit23。当系统复位时其值为 0。 2.1.3 当前数值寄存器VAL VAL 是 SysTick 定时器的当前数值寄存器。其相应位功能如下 同样只有 bit0-bit24 有效复位时值为 0。 2.1.4  校准数值寄存器CALIB  CALIB 是 SysTick 定时器的校准数值寄存器。其相应位功能如下 此寄存器在定时实验中不需要使用可以不用了解。 2.2 系统节拍定时器的工作原理 当系统节拍定时器⼯作时该定时器⾸先会从寄存器LOAD存储的值开始递减计数。当递减为0 后寄存器CTRL的COUNTFLAG状态位会置1同时会重装载寄存器LOAD预置的值。 当计数到时通过设置寄存器CTRL的TICKINT的值来产⽣异常中断或是⽆动作。 2.3 SysTick 定时器操作步骤 SysTick 定时器的操作可以分为 4 步 设置 SysTick 定时器的时钟源。 设置 SysTick 定时器的重装初始值如果要使用中断的话就将中断使能打开。 清零 SysTick 定时器当前计数器的值。 打开 SysTick 定时器。 2.4  使用SysTick 定时器实现精准延时 2.4.1 实现1微秒延时 void Sleep_us(uint32_t us) {while(us--){SysTick -CTRL (1 0); //定时器使能第0位置1SysTick -CTRL ~(12); //选择时钟源第2位置0选择外部时钟源由系统时钟八分频后提供即 168/821MSysTick -CTRL ~(11); //延时时间到无动作第1位置0SysTick -VAL 0x0; //当前数值寄存器初值赋0SysTick -LOAD 21; //重装载数值寄存器的值定时1微秒所以是21while(!(SysTick -CTRL (116))); //死循环等待计数值减到0SysTick -CTRL ~(10); //关闭定时器第0位置0}}//复用上述函数实现延时1秒 void Sleep_s(uint32_t s) {while(s--){Sleep_ms(1000);} } 2.4.2 实现1毫秒延时 void Sleep_ms(uint32_t ms) {while(ms--){SysTick -CTRL (1 0); //定时器使能第0位置1SysTick -CTRL ~(12); //选择时钟源第2位置0选择外部时钟源由系统时钟八分频后提供即 168/821MSysTick -CTRL ~(11); //延时时间到无动作第1位置0SysTick -VAL 0x0; //当前数值寄存器初值赋0SysTick -LOAD 21000; //重装载数值寄存器的值定时1毫秒所以是21000while(!(SysTick -CTRL (116))); //死循环等待计数值减到0SysTick -CTRL ~(10); //关闭定时器第0位置0}} 2.4.3 实现1秒延时 void Sleep_s(uint32_t s) {while(s--){SysTick -CTRL (1 0); //定时器使能第0位置1SysTick -CTRL ~(12); //选择时钟源第2位置0选择外部时钟源由系统时钟八分频后提供即 168/821MSysTick -CTRL ~(11); //延时时间到无动作第1位置0SysTick -VAL 0x0; //当前数值寄存器初值赋0SysTick -LOAD 21000000; //重装载数值寄存器的值定时1秒所以是21000000while(!(SysTick -CTRL (116))); //死循环等待计数值减到0SysTick -CTRL ~(10); //关闭定时器第0位置0}} 1秒1000毫秒1000微秒。 三、SysTick 定时实验 利用 SysTick 产生 1s 的时基LED 以 1s 的频率闪烁。 led.h文件 #ifndef __MYLED_H #define __MYLED_Hvoid LED_Init(void);#endif led.c 文件 #include stm32f4xx.h // Device header #include myled.h/*开时钟 打开外设对应的时钟查看参考手册该外设挂在哪个数据总线上对应GPIO在哪条总线开哪条GPIOF外设 挂在AHB1总线上所以要打开AHB1的时钟双击函数右键-go to definition*/void LED_Init(void) {//第一步使能GPIOF的时钟 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能 GPIOF 时钟//第二步GPIOF9,F10 初始化设置GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin GPIO_Pin_9 | GPIO_Pin_10;//LED0 和 LED1 对应 IO 口GPIO_InitStructure.GPIO_OType GPIO_OType_PP;//推挽输出GPIO_InitStructure.GPIO_Speed GPIO_Speed_100MHz;//100MHzGPIO_Init(GPIOF, GPIO_InitStructure);//初始化 GPIO//第三步设置灯的初始状态GPIO_SetBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);//GPIOF9,F10 设置高电平灯灭 } mydelay.h #ifndef __MYLED_H #define __MYLED_Hvoid LED_Init(void);#endif mydelay.c #include stm32f4xx.h // Device header #include mydelay.hvoid My_Delay_us(uint32_t num) {while(num--){SysTick -CTRL (1 0);SysTick -CTRL ~(12);SysTick -CTRL ~(11);SysTick -VAL 0x0;SysTick -LOAD 21;while(!(SysTick -CTRL (116)));SysTick -CTRL ~(10);} }void My_Delay_ms(uint32_t num) {while(num--){My_Delay_us(1000);} }void My_Delay_s(uint32_t num) {while(num--){My_Delay_ms(1000);} } main.c文件 #include stm32f4xx.h // Device header #include stdio.h #include mydelay.h #include myled.hint main(void) {LED_Init();while(1){My_Delay_ms(1000); //延时1秒GPIO_ToggleBits(GPIOF,GPIO_Pin_9 | GPIO_Pin_10);} } 实验现象      两个灯每隔一秒闪烁一次。 至此我们的本次的学习就结束了。通过以上几个实验相信对串口通信有了深入的理解这一节我们就讲解到这里希望能对大家的开发有帮助。 如有兴趣感谢点赞、关注、收藏若有不正地方还请各位大佬多多指教
http://www.zqtcl.cn/news/100576/

相关文章:

  • 网站营销活动页面制作wordpress 只显示一个主题
  • 电子网站建设怎么做秦皇岛网站制作公司
  • 网站建站模板样例平台推广怎么做
  • 网站建设首选亿企联盟做网站宣传有用吗
  • 网站建设公司行业苏州高端网站建设咨询
  • 电商平台网站开发过程江苏省建设科技发展中心网站简介
  • 空间租用 网站开发重庆手机网站推广资料
  • 新余 网站建设网站建设行业新闻
  • 做301网站打不开网上智慧团建网站
  • 四川省住房与城乡建设厅官方网站免费域名解析ip
  • 芜湖网站建设价格这么做网站原型图
  • 做传奇网站怎么弄的南京微网站开发
  • 网站建设基础教程人教版网站域名选择的原则
  • u盘做网站网站建设公司公司介绍
  • 嘉兴网站排名优化报windows wordpress 轻量级
  • html5网站开发方案海珠网站建设公
  • 津做网站建筑网课平台
  • 佛山制作手机网站汕头网站定制
  • 网站域名解释怎么做济南集团网站建设
  • 网站怎么做咨询网站开发商
  • 建立网站的第一步网站的管理系统
  • 安远做网站做宣传册网站
  • 网站建设概况君隆网站建设
  • 富源县住房和城乡建设局网站备案信息 网站名
  • 做门窗的网站宁波附近的seo推广
  • 上海网站建设解决方案怎样设计网站
  • 龙华建站公司seo研究中心怎么样
  • 网站的大图标怎么做项目网站
  • 南京网站设计机构wap网站设计方案
  • 建站点怎么做网站wordpress 重写规则