你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

AVR单片机外接16M晶振和STM32F103外接8MHZ,运行速度哪个快?

[复制链接]
qazplm3218 提问时间:2019-3-9 12:56 /
同样的程序进行比较:
AVR单片机外接16M晶振:运行程序是矩阵按键扫描采用定时器中断100ms扫描一次、还有串口接收中断程序1S接收一次运行程序上后,串口接收中断程序不会影响矩阵按键扫描,不会发生丢失按键动作现象。


STM32F103外接8M晶振:同样的是矩阵按键扫描采用定时器中断100ms扫描一次、还有串口接收中断程序1S接收一次
运行程序上后,串口接收中断程序就直接影响到矩阵按键扫描,就是在执行串口接收中断程序时,检测不到按键,发生丢失按键动作现象。

按理说STM32F103的系统时钟是72M,而AVR单片机晶振是16M,STM运行速度要快很多,不应该出现丢失按键动作的现象啊?难道是这两款单片机的中断机制不一样造成的吗?AVR单片机是没有中不需要设置中断优先级的,而STM32F103是需要设置中断优先级的,问题是我不管怎么设置中断优先级都没什么用,还是会发生丢失按键动作现象???
收藏 评论6 发布时间:2019-3-9 12:56

举报

6个回答
tanic 回答时间:2019-3-9 14:13:18
确定定时器是否配置正确,中断电灯,看看时间对不对
qazplm3218 回答时间:2019-3-9 15:13:29
tanic 发表于 2019-3-9 14:13
确定定时器是否配置正确,中断电灯,看看时间对不对

100ms定时器设置没有问题,都测试过了。
就算把100ms改成50ms,按键检测也会丢失,而且串口中断里面的程序也不多,也没有占用多少时间。
人之颠 回答时间:2019-3-9 17:38:22
这基本上是你程序的问题,多排查下吧
maxtch 回答时间:2019-3-9 22:32:45
两个问题:
1. 时钟配置是否正确?默认情况下 STM32F103 的默认时钟是片内 8MHz RC 振荡器,你需要手动打开外部晶振,再把时钟调整成 PLL 72MHz。
2. I/O 端口的速度配置是否正确?STM32F103 的端口速度有 2MHz、10MHz、50MHz 三种配置。
七哥 回答时间:2019-3-9 22:42:20
本帖最后由 toofree 于 2019-3-10 14:23 编辑

程序或硬件问题,并不是STM32不行。
中断服务中不要执行太长代码,不要出现while死循环等待。
qazplm3218 回答时间:2019-3-10 14:13:44
外接8M晶振,然后倍频到72M,程序如下:应该没错吧?
  1. void RCC_Configuration(void)
  2. {
  3.         RCC_DeInit();
  4.         RCC_HSEConfig(RCC_HSE_ON);
  5.         while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
  6.         FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  7.         FLASH_SetLatency(FLASH_Latency_2);
  8.         RCC_HCLKConfig(RCC_SYSCLK_Div1);
  9.         RCC_PCLK2Config(RCC_HCLK_Div1);
  10.         RCC_PCLK1Config(RCC_HCLK_Div2);
  11.         FLASH_SetLatency(FLASH_Latency_2);
  12.         FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
  13.         RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
  14.         RCC_PLLCmd(ENABLE);                                                                                                                                                                                //PLLʹÄÜ
  15.         while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  16.         RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
  17.         while(RCC_GetSYSCLKSource()!=0x08);
  18. }
复制代码


关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版