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

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 三种配置。
toofree 回答时间: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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版