涉及的参考来自:野火的《【野火®】零死角玩转STM32—F103霸道》、野火例程

1.systick进中断不用清标志的,这个好奇怪,难道是因为它是内核外设?

2.第二个不同之处是它的优先级的奇怪,其优先级没有主和子优先级之说,并且STM32只保留了其高4bit有效,也就是其优先级可设范围为0~15;

直接调用NVIC_SetPriority实现

NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Systick Interrupt */

但是虽然它没有主和子优先级之说,但是碰到其他外设时,怎么比较?还是按照优先级分组的配置来比较,也就是按照优先级分组的比例来拆分,进行比较。

3. 不管开不开其中断,其计数器值一旦递减为0,计数标志就置1,有中断进中断,无中断也没啥事,继续重载计数。

4.systick优先级设的时候是和那个NVIC的优先级分组没关系,不受NVIC怎么分组的影响,而且systick不分主和子优先级的。但是比较的时候是按NVIC的分组值比的,比的时候将其值按分组值进行拆分再比。

5.计数-1的问题,可以这么理解,比如你设置n,那么它进一次中断时n,接下来就是,n-1,n-2,……,0,实际运行了n+1,所以要-1.这样理解就行了。为啥不用递增理解?因为这个计数器是递减计数器,虽然可以用递增来理解但它没有说明它内部是+1操作的,所以我觉得如果举递增的理解方式会有误导,虽然道理一样。

6.野火例程的改写

针对其第二个在程序中检测计数器标志的延时,我是看它还是开中断,而且每次都要重新配置,我就闲累,于是改写成不开中断,配置一次,之后只是开计数器关计数器。

    RCC_ClocksTypeDef  RccClocks;uint32_t SystemClockFrequency = 0, u32Cnt = 0;RCC_GetClocksFreq(&RccClocks);SystemClockFrequency = RccClocks.HCLK_Frequency;u32Cnt = SystemClockFrequency/1000;if ((u32Cnt - 1) > SysTick_LOAD_RELOAD_Msk)    /* Reload value impossible */{ /* Capture error */ while (1);}else{SysTick->LOAD  = u32Cnt  - 1;                                  /* set reload register */NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Systick Interrupt */SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk;                                               SysTick->CTRL &= ~(SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk); /* Disable SysTick IRQ and SysTick Timer */}u16 i;for(;;){LED1( ON ); // 配置 counter 计数器的值SysTick->VAL   = 0;SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; /* Enable SysTick Timer,But diable SysTick IRQ*/for(i=0;i<1000;i++){// 当计数器的值减小到0的时候,CRTL寄存器的位16会置1// 当置1时,读取该位会清0while( !((SysTick->CTRL)&(1<<16)) );}// 关闭SysTick定时器SysTick->CTRL &=~ SysTick_CTRL_ENABLE_Msk;//        SysTick_Delay_Ms( 1000 );LED1( OFF );LED2( ON );// 配置 counter 计数器的值SysTick->VAL   = 0;SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; /* Enable SysTick Timer,But diable SysTick IRQ*/for(i=0;i<1000;i++){// 当计数器的值减小到0的时候,CRTL寄存器的位16会置1// 当置1时,读取该位会清0while( !((SysTick->CTRL)&(1<<16)) );}// 关闭SysTick定时器// 配置 counter 计数器的值SysTick->CTRL &=~ SysTick_CTRL_ENABLE_Msk;
//      SysTick_Delay_Ms( 1000 );LED2( OFF );LED3( ON );// 配置 counter 计数器的值SysTick->VAL   = 0;SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk; /* Enable SysTick Timer,But diable SysTick IRQ*/for(i=0;i<1000;i++){// 当计数器的值减小到0的时候,CRTL寄存器的位16会置1// 当置1时,读取该位会清0while( !((SysTick->CTRL)&(1<<16)) );}// 关闭SysTick定时器SysTick->CTRL &=~ SysTick_CTRL_ENABLE_Msk;
//      SysTick_Delay_Ms( 1000 );LED3( OFF );} 

STM32_Systick学习及例程改写相关推荐

  1. 学习Enroll例程

    学习Enroll例程 Visual C++提供了一个名为Enroll的例子来作为学习MFC数据库编程的教程.Enroll分为四步,本节的任务就是指导读者完成前三步的Enroll例程,并对其进行较彻底的 ...

  2. 【matlab】强化/深度学习工具箱例程调用汇总及编程实例

    前言 前段时间帮导师申请项目时涉及到了智能化,因为行文过于天马行空导师要求将大致思路仿真出来试试,于是就又找到了强大的MATLAB,在网上一顿搜索后发现最新的强化学习以及深度学习的工具箱只有2019年 ...

  3. sklearn学习-SVM例程总结3(网格搜索+交叉验证——寻找最优超参数)

    网格搜索+交叉验证--寻找最优超参数 1548962898@qq.com 连续三天写了三篇博客,主要是为了尽快了解机器学习中算法以外的重要知识,这些知识可以迁移到每一个算法中,或许说,这些知识是学习并 ...

  4. sklearn学习-SVM例程总结2(特征选择——单因素方差分析(方差分析anova ))

    SVM with univariate feature selection(单因素方差分析) 本文隶属于机器学习的特征选择部分,是训练前对数据的预处理部分.对于机器学习而言,特征选择是影响结果的极其重 ...

  5. 命名管道学习(简单例程)----Windows进程间通信

    管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机.通常我们把管道分为匿名管道和命名管道.但对于匿名管道的话,只能在本机上进程之间通信, ...

  6. DSP28335/377学习-controlSUITE安装及TI电机控制例程

    1 软件安装及介绍 controlSUITE是Ti为C2000开发者提供的资料库和参考工具包.在这里面对C2000每个型号都有对应的样例.手册和设计指导.还有各种开发板平台的原理图.PCB图和使用说明 ...

  7. STM32F429I-Discovery学习笔记--(1)简单上手和官方例程的下载与使用

    STM32F429I-Discovery学习笔记–(1)简单上手和官方例程的下载与使用 到手测试 收到开发板后我们要首先检查一下外观有没有磕碰破损,排针是否发生弯折,重要的是看一下JP3和CN4处的跳 ...

  8. 如何借助官网例程学习STM32

    如何借助官网例程学习STM32 现在STM32的资料已经非常多了,那么假如市场上这款芯片刚刚出现,没有可参考的TB店家,应该怎么办呢?答案是可以参考官网例程! 1.首先打开官方网址:https://w ...

  9. Matlab生成dsp程序——官方例程学习

    Matlab生成dsp程序--官方例程学习 写在下面的话 ADC-PWM例子学习 一.基本功能 二.生成代码分析 三.总结 写在下面的话    还是很建议大家多去学习官方例程的,真的能够收获到很多很多 ...

最新文章

  1. 移动端图形化报表界面设计_B端移动设计 | 客户RFM分析
  2. 鸿蒙os整体战略发布会,就在明天,华为将发布“鸿蒙OS”整体战略,能否用于手机?...
  3. linux 内存占用_分享Linux内存占用几个案例
  4. Web推流,Webrtc网页推流rtmp在教学直播录制中应用
  5. [CommunityServer]看RBAC的一方景象
  6. Win10 UWP开发中的重复性静态UI绘制小技巧 1
  7. weex 安装过程中遇到的坑
  8. 【51单片机快速入门指南】4.3: I2C读取MPU6050陀螺仪的原始数据
  9. 标记 (TAG) 您的 k8s 集群资源
  10. 12001.linux应用程序之i2c编程
  11. Python学习笔记(一)——基本知识点
  12. 测试想要月薪过万?这些能力必不可少!
  13. NSUserDefault的使用
  14. 《1024伐木累》-屌丝、快播、苍老师
  15. ps考证是电脑改卷吗
  16. nonebot2插件之主持飞花令
  17. Conventional-path insert(传统路径插入)
  18. 【综合算法】不考虑误差的TDOA定位
  19. 硬件基础:台式电脑上的常用的几个接口!
  20. 【002】SPARC V8 体系结构第一章介绍

热门文章

  1. 项目以任务还是以功能为中心?
  2. 【转】left join 和 left outer join 的区别
  3. Coolite Toolkit学习笔记三:基本控件之Button、TextField、DataField、ComboBox
  4. 常用选择器(CSS+JQuery)
  5. python django_8个Python软件包将简化Django的生活
  6. 开源的商业意义_为开源项目提供资金具有良好的商业意义
  7. 比较两个文档的相似程度_您的文档对读者的友好程度如何?
  8. (25)npm scripts 实践—构建脚本文件
  9. Bootstrap3 工具提示插件的事件
  10. php执行跟踪_PHP 代码调试跟踪工具 Ytrace