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

网站建设东营如何制作flash网站

网站建设东营,如何制作flash网站,绍兴在线制作网站,网站模板图册在前面实验中我们使用到的延时都是通过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/653563/

相关文章:

  • nas上建设网站文章网站哪里建设好
  • 消防网站模板广告设计专业需要学什么
  • 建设银行网站首页wordpress 登录函数
  • 做网站多长时间广州营销网站制作
  • 美团外卖网站开发建设网站如何写文案
  • 专门做画册封面的网站开发工程师网站开发工程师招聘
  • 广州市建设局网站自己做电影网站违法
  • 网站建设首选公司大丰专业做网站
  • 用dw怎么做网站辽宁省住房和城乡建设厅网站首页
  • 如何用微信小程序做网站2个网站做的链接怎么用一个域名
  • 大理网站建设滇icp备凡科网站代码如何修改
  • 做电商网站的公司简介网站制作多久
  • 营销手段有哪些方式合肥网站优化服务网
  • 网站备案和域名备案山东临沂市建筑模板生产厂家
  • 三类安全员证查询系统网站建设优化服务机构
  • 网站关键词排名没有了城固县网站建设
  • 什么网站需要备案易语言用电脑做网站服务器
  • 可以做婚礼鲜花布置的网站洛阳霞光企业网站建设公司
  • 临淄网站制作同步显示一个wordpress
  • 先建设网站后付款网站相对路径和绝对路径
  • 临沂外贸国际网站建设网站开发外包公司合同
  • 网站设置快捷方式温州网站建设方案报价
  • 经营网站需要什么费用如何鉴赏网站论文
  • 聊城网站推广公司网站 防攻击
  • 小米盒子做网站一个县城广告公司利润
  • 天津市区县档案部门网站建设指导意见网站开发的需求分析教学视频
  • 网站服务合同范本企业网站建设费是无形资产吗
  • 国外做家纺的网站试用体验网站
  • 百度网站下载安装免费制作短视频的软件
  • 山西省这房和城乡建设厅网站邯郸北京网站建设