完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
另一方面,似乎也可以将Systick设置为NVIC中的中断。它有自己的中断请求号,可以设置为挂起状态。由于NVIC中断具有可编程的优先级,我们也可以通过这种方式进行设置。 我不太清楚使用SysTick这两种方法之间的区别。
|
|
相关推荐
10个回答
|
|
你的程序在C ++中是否有机会?如果是这样,请记住你需要在'extern“C”'中包装你的SysTick_Handler或它的声明。
|
|
|
|
你可以扩展你的第二段,也许用例子。我想知道这里是否存在一些混淆。NVIC处理所有异常,包括IRQ。
|
|
|
|
经过几年的Matlab,我实际上只是回到ARM编程。我从我公司的一位高级开发人员那里得到了一个项目,它系统地尝试使用SysTick,好像它是一个常规中断,导致我的第二段,微妙的混乱和众多的总线和硬故障。
|
|
|
|
首先是两个定义:
在Cortex-M编程手册中,Exception是破坏正常程序流的任何东西,并从向量表调用处理程序,而Interrupts是Exceptions的子集,来自ARM核心之外的外设。因为SysTick是在Cortex-M内核中实现的,所以它被认为是异常,但不是中断。 异常具有异常编号,从0开始。中断具有IRQ编号,从0开始。因为所有中断都是异常,所以它们都获得异常编号,比IRQ编号高16。非中断的异常(包括SysTick)在0-15范围内具有异常编号,小于中断的异常编号。有点令人困惑的是,非中断的异常也有IRQ号,这可以延伸到-16到-1的范围内。SysTick的例外编号为15,IRQ编号为-1。 除Reset,NMI和Hardfault之外的所有异常都具有可配置的优先级。它只是为中断和其他异常配置不同。请参阅CMSIS实施作为一个明显的例子:
您可以直接调用NVIC_SetPriority或操作SCB->SHP以使SysTick的优先级低于任何其他中断。 SysTick确实具有高于任何中断的默认优先级,但这仅仅是因为在复位时,所有优先级都设置为0,并且在平局的情况下,较低的IRQ编号获胜,在这种情况下,SysTick为-1。 |
|
|
|
只有中断可以通过NVIC寄存器进行配置,SysTick不是中断。NVIC寄存器无法在位掩码或其他位置使用负IRQ编号。
SysTick确实可以设置为挂起状态,但这是通过SCB->ICSRNVIC完成的。 请注意,NVIC_SetPriority()并NVIC_GetPriority()在CMSIS具有消极IRQ号妥善处理的唯一NVIC_功能。其他函数喜欢NVIC_SetPendingIRQ()或NVIC_EnableIRQ()只是接受负IRQ数字,对它们进行一些改组,导致与NVIC寄存器的巨大偏移,并乱写一些遥远的内存地址,可能导致严重故障或其他奇怪的行为。当您USE_FULL_ASSERT在标头中启用时,HAL_NVIC_函数会执行一些边界检查,否则它们只会将无效参数传递给CMSIS NVIC函数。 有一个巧妙的技巧来找到使用负参数调用函数的所有位置。把它放到一个公共标题中: #define NVIC_EnableIRQ(x) ((void)sizeof(char[x])) 每当使用负数调用此构造时,这是一个编译时错误。对除除 NVIC_SetPriority()和之外的每个NVIC函数重复此操作NVIC_GetPriority()。 |
|
|
|
systick和外设中断之间的根本区别在于,当核心中可用时,systick由ARM指定为IRQ 6(0x003C)。
它也是ARM Cortex的一部分,由同一时钟提供时钟,因此是同步的。 其例外(中断)由制造商决定,以决定他们拥有的基本优先级(偏移量)和来源。 从ST编程手册(PM0056): SysTick异常是系统计时器到达零时生成的异常。软件还可以生成SysTick异常。在OS环境中,处理器可以将此异常用作系统标记。 中断或IRQ是外设发出的异常,或由软件请求生成的异常。所有中断都与指令执行异步。 |
|
|
|
除了Reset,NMI和Hardfault之外,Cortex-M系列可以配置异常优先级。请参阅SCB->SHPR{1,2,3}编程手册中的说明。
|
|
|
|
没错,但是它们将每个中断都称为异常,因为它是正常程序流的一个例外。
|
|
|
|
如果ARM提供的逻辑将时钟信号提供给systick计数器以及核心的其他部分(我很确定它会这样做),芯片制造商如何使systick不同步?
|
|
|
|
它仍然是IRQ 6.但您可以更改NVIC中的优先级组。但是在每个Cortex中你仍然会得到6分。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2005 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1858 浏览 3 评论
4442 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2007 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2513 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 22:56 , Processed in 0.721058 second(s), Total 62, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号