完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
`NVIC是什么? 你把它当成是中断的开关即可,就像串口接收到很多数据,如果CPU不去处理后果会怎样?
如果开启了串口接收中断,一旦串口收到数据,马上叫CPU去处理,这就是NVIC,简单把。 因为下一帖将是使用串口控制LED的样式变化,所以需要普及一下NVIC 这里我不使用库函数,因为库函数把NVIC搞复杂了。 NVIC是内核的内容,所以它在core_cm3.h里面,初学STM32去接触一个内核文件是不是觉得很复杂? 纯粹是心理作怪。。你把core_cm3.h看成是一个函数库就行了,里面其实就是很多函数给你调用的。 这里我提取主要的3个函数出来给大家直接使用,会用就等于你可以完全不用再理NVIC了,等到一定水平,可以回来再砍这个内核里面到底是什么。 static __INLINE void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) static __INLINE void NVIC_EnableIRQ(IRQn_Type IRQn) static __INLINE void NVIC_SetPriorityGrouping(uint32_t PriorityGroup)//优先级组 这3个是常用的,或者说基本只用这3个函数,实际用得还是只有2个。NVIC默认是组4,即4位抢占优先级,0位响应 抢占优先级意思就是可以插队,而响应可以理解为排队。 实际工作的情况是使用默认分组足够了,新手不要把问题弄得那么复杂,下面是例子: NVIC_SetPriority(UART1_IRQn,2); NVIC_EnableIRQ(UART1_IRQn); NVIC_SetPriority(UART0_IRQn,9); NVIC_EnableIRQ(UART0_IRQn); NVIC_SetPriority(UART2_IRQn,8); NVIC_EnableIRQ(UART2_IRQn); NVIC_SetPriority(UART3_IRQn,11); NVIC_EnableIRQ(UART3_IRQn); 数字越低越优先。到这里,你完全可以抛弃NVIC了,因为它就这么简单。只要是coretex-M3内核的,上面的函数都可用。而库函数只能STM32自己用。留些疑问给大家,这些xx_IRQn的命名哪里可以获知?使能这些中断,发生中断CPU对应会跳到哪个程序?__INLINE 的作用? https://bbs.elecfans.com/jishu_400655_1_1.html 第一帖点亮LED给大家留了一些问题,现在给出我的见解: 1,可以改成推挽输出,但是没必要。。如果硬件上引脚接LED接下拉电阻(即接地),那是不是用推挽或开漏都可以?这个百度有 2,因为时钟初始化文件是使用了9倍频,即使8MHz*9,所以为72MHz,如果是12MHz,就超范围了。要修改system_stm32f10x.c :中的SystemInit()-> RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9); 继续留疑问:为什么主函数中没有SystemInit()却能初始化时钟? 3,http://blog.csdn.net/kason2011/article/details/7375745 这理很详细 4,调用库函数的效率比不上使用寄存器,即库函数执行的时间肯定比直接使用寄存器的时间长,但初始化只用1次,不影响效率问题 5,需要自己尝试找原因,直接说的话没效果的。 ` 评分 |
|
相关推荐
7 个讨论
|
|
|
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-4 01:48 , Processed in 0.673702 second(s), Total 89, Slave 69 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号