AVR单片机外接16M晶振和STM32F103外接8MHZ,运行速度哪个快?
同样的程序进行比较:AVR单片机外接16M晶振:运行程序是矩阵按键扫描采用定时器中断100ms扫描一次、还有串口接收中断程序1S接收一次运行程序上后,串口接收中断程序不会影响矩阵按键扫描,不会发生丢失按键动作现象。
STM32F103外接8M晶振:同样的是矩阵按键扫描采用定时器中断100ms扫描一次、还有串口接收中断程序1S接收一次
运行程序上后,串口接收中断程序就直接影响到矩阵按键扫描,就是在执行串口接收中断程序时,检测不到按键,发生丢失按键动作现象。
按理说STM32F103的系统时钟是72M,而AVR单片机晶振是16M,STM运行速度要快很多,不应该出现丢失按键动作的现象啊?难道是这两款单片机的中断机制不一样造成的吗?AVR单片机是没有中不需要设置中断优先级的,而STM32F103是需要设置中断优先级的,问题是我不管怎么设置中断优先级都没什么用,还是会发生丢失按键动作现象???
确定定时器是否配置正确,中断电灯,看看时间对不对 tanic 发表于 2019-3-9 14:13
确定定时器是否配置正确,中断电灯,看看时间对不对
100ms定时器设置没有问题,都测试过了。
就算把100ms改成50ms,按键检测也会丢失,而且串口中断里面的程序也不多,也没有占用多少时间。
这基本上是你程序的问题,多排查下吧 两个问题:
1. 时钟配置是否正确?默认情况下 STM32F103 的默认时钟是片内 8MHz RC 振荡器,你需要手动打开外部晶振,再把时钟调整成 PLL 72MHz。
2. I/O 端口的速度配置是否正确?STM32F103 的端口速度有 2MHz、10MHz、50MHz 三种配置。
本帖最后由 toofree 于 2019-3-10 14:23 编辑
程序或硬件问题,并不是STM32不行。
中断服务中不要执行太长代码,不要出现while死循环等待。 外接8M晶振,然后倍频到72M,程序如下:应该没错吧?
void RCC_Configuration(void)
{
RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);
while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
FLASH_SetLatency(FLASH_Latency_2);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
FLASH_SetLatency(FLASH_Latency_2);
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE); //PLLʹÄÜ
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource()!=0x08);
}
页:
[1]