在库函数中NVIC部分中有一个函数为:NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset)中定义输入参数Offset:向量表基地址的偏移量,如果该参数设定为FLASH时,该参数值必须高于0x08000100;如果该参数设定为RAM则必须高于0x100。而且它同时必须是256的整数倍。而后下面接着给出了一个例子: NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); 不明白的地方是1:明明文字描述中说offset值必须得高于0x08000100,而在这里却设的是0x0,难道说0x0要比0x08000100高吗?这个“高”是怎么理解的呀? 2:在例程中有一个SysTick中有一段对NVIC的设定如下 程序(一) void NVIC_Configuration(void) { #ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); #else /* VECT_TAB_FLASH */ /* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); #endif } 可否帮我解释一下VECT_TAB_RAN是什么意思?它即设定了FLASH的向量表的位置和偏移,又设定了ARM的,这里到底是要做什么? 还有程序关于NVIC的设定为 程序(二) void NVIC_Config(void) { NVIC_InitTypeDef NVIC_IbutStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel=EXIT2_IRQChannel; NVIC_InitStructure.NVIC_IRQChannePreemptionPruirity=0; NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; NVIC_InitStructure.NVIC_IRQChannelCmd=NABLE; NVIC_Init(&NVIC_InitStructure); } 想问的是:什么时候将设为NVIC设为程序(一)的形式,什么时候又将其设为程序(二)的形式。 thank you!我是一只小菜鸟,不要嘲笑我哈哈 |
RE:NVIC
2、NVIC_Config();用来配置中断的,而上面是中断向量列表,是2个不同的概念和使用方法。
回复:NVIC
1、如果定义了VECT_TAB_RAM 变量,向量列表就放入NVIC_VectTab_RAM地址,没有则放入NVIC_VectTab_FLASH地址。这里是处理向量列表的存放区域。
2、NVIC_Config();用来配置中断的,而上面是中断向量列表,是2个不同的概念和使用方法。
还有问题:前面明明文字描述中说offset值必须得高于0x08000100,而在这里却设的是0x0,难道说0x0要比0x08000100高吗?这个“高”是怎么理解的呀?
回复:NVIC
在库函数中NVIC部分中有一个函数为:NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset)中定义输入参数Offset:向量表基地址的偏移量,如果该参数设定为FLASH时,该参数值必须高于0x08000100;如果该参数设定为RAM则必须高于0x100。而且它同时必须是256的整数倍。而后下面接着给出了一个例子:
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
不明白的地方是1:明明文字描述中说offset值必须得高于0x08000100,而在这里却设的是0x0,难道说0x0要比0x08000100高吗?这个“高”是怎么理解的呀?
2:在例程中有一个SysTick中有一段对NVIC的设定如下
程序(一)
void NVIC_Configuration(void)
{
#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
}
可否帮我解释一下VECT_TAB_RAN是什么意思?它即设定了FLASH的向量表的位置和偏移,又设定了ARM的,这里到底是要做什么?
还有程序关于NVIC的设定为
程序(二)
void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_IbutStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel=EXIT2_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannePreemptionPruirity=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=NABLE;
NVIC_Init(&NVIC_InitStructure);
}
想问的是:什么时候将设为NVIC设为程序(一)的形式,什么时候又将其设为程序(二)的形式。
thank you!我是一只小菜鸟,不要嘲笑我哈哈
回复:NVIC
在库函数中NVIC部分中有一个函数为:NVIC_SetVectorTable(u32 NVIC_VectTab, u32 Offset)中定义输入参数Offset:向量表基地址的偏移量,如果该参数设定为FLASH时,该参数值必须高于0x08000100;如果该参数设定为RAM则必须高于0x100。而且它同时必须是256的整数倍。而后下面接着给出了一个例子:
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
不明白的地方是1:明明文字描述中说offset值必须得高于0x08000100,而在这里却设的是0x0,难道说0x0要比0x08000100高吗?这个“高”是怎么理解的呀?
2:在例程中有一个SysTick中有一段对NVIC的设定如下
程序(一)
void NVIC_Configuration(void)
{
#ifdef VECT_TAB_RAM
/* Set the Vector Table base location at 0x20000000 */
NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else /* VECT_TAB_FLASH */
/* Set the Vector Table base location at 0x08000000 */
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
#endif
}
可否帮我解释一下VECT_TAB_RAN是什么意思?它即设定了FLASH的向量表的位置和偏移,又设定了ARM的,这里到底是要做什么?
还有程序关于NVIC的设定为
程序(二)
void NVIC_Config(void)
{
NVIC_InitTypeDef NVIC_IbutStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel=EXIT2_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannePreemptionPruirity=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=NABLE;
NVIC_Init(&NVIC_InitStructure);
}
想问的是:什么时候将设为NVIC设为程序(一)的形式,什么时候又将其设为程序(二)的形式。
thank you!我是一只小菜鸟,不要嘲笑我哈哈
+问