为什么protues8.6版本,仿真stm32很多功能仿真不了,比如按键外部中断等。
3条回答 默认 最新
- Kwan的解忧杂货铺@新空间 2024-05-26 22:25关注
晚上好🌙🌙🌙
本答案参考ChatGPT-3.5原因:
Proteus 8.6版本的STM32模块库不够完善,无法完全模拟针对特定功能的芯片,《ST官方库》和《Keil官方库》也与之不兼容。此外Simulation1.exe(Proteus仿真引擎)本身的不足也导致模拟时无法达到实际效果。
解决方案:
1.更新Proteus版本,如更新至Proteus 8.7 SP3版,它大幅改进了STM32模块库,支持针对STM32常用功能的模拟。
2.使用“Proteus修改器”这个软件修改Proteus的一些文件,增加STM32支持的外设(比如按键、定时器、UART等)。
3.使用其他仿真工具,如更全面的IAR工具集、更为实用的KEIL U版本、更多功能的UVISION等。
4.外部调试,使用好USART/UART和JTAG调试手段。
代码示例(外部中断):
外部中断是STM32的重要功能之一,它常在指定的引脚上接入按键控制,有按键按下时则引脚获得高电平,触发外部中断。
下面是正确的基于STM32F103C8T6芯片模拟外部中断的代码实现:
首先需要在stm32f10x_conf.h文件中打开中断:
#define USE_EXTI_0_1 #define USE_EXTI_2_3 #define USE_EXTI_4_15
在main函数中初始化GPIO和外部中断:
/* GPIO Initialize */ void GPIO_Init_Config(void) { GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); RCC_ClearFlag();
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
EXTI_InitTypeDef EXTI_InitStructure; EXTI_InitStructure.EXTI_Line = EXTI_Line0; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure);
NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
最后,编写触发的中断函数:
void EXTI0_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line0) != RESET) { // Do something... EXTI_ClearITPendingBit(EXTI_Line0); } }
解决 无用评论 打赏 举报 编辑记录