proteus仿真STM32时钟问题

  • 今年由于疫情,每天给学生上网课讲解STM32单片机。我们也知道实践强的课程,还是应该大量结合动手。所以要求网上购买了开发板,结果快递也都不通了。只能想办法用proteus来仿真STM32。网上搜索了下,没有发现其他更好用的仿真软件。

  • 一开始用STM32用的是HAL库来进行教学,编译完成后,加载到proteus上进行仿真运行,基本问题不大。proteus上的STM32单片机毕竟是虚拟的,可能和实际单片机在内在机制上还是有兼容性问题。所以在运行中也有一些小问题,对于学生来说,可能对单片机硬件了解不深,很难解决。

  • 比如:利用定时器3的2通道输出PWM波,希望对管脚进行重定义,按照参考手册来说,将PA7管脚重定位到PB5管脚,需要部分重映射,但是在仿真中发现,只有执行完全重映射,才会将PA7管脚定位到PB5。按照参考手册,这是不对的,但是在proteus中这样才能正常运行。

        __HAL_RCC_TIM3_CLK_ENABLE();			//使能定时器3
//		__HAL_AFIO_REMAP_TIM3_PARTIAL();		//TIM3通道引脚部分重映射使能__HAL_AFIO_REMAP_TIM3_ENABLE();   //TIM3通道引脚完全重映射使能`	
  • 试图找一下原因,但是目前手头的开发板是STM32F103VET6和STM32F103ZET6,都属于性能较强的,而PROTEUS中的STM32F103R6属Low
    density devices。没有办法在实际开发板上验证。

  • 鉴于此,不用HAL库,换成库函数。
    但是库函数却遇到了更大的问题。用调用库函数实现了定时器和串口功能。
    仿真中发现定时器的时序是对的,但是串口功能波特率不正确,通过虚拟示波器获取波形发现,串口的每位时长,是正确时长的大概1/9,也就是波特率是程序中所设置的波特率的9倍。9–这么熟悉的数字,难道是串口的时钟没有设置PLL9倍频吗?但是定时器确是正确的?奇葩的各种问题。顾不上研究太深,这个研究深了其实也没多大意义 。

  • 直接修改RCC->CFGR寄存器,配置RCC,RCC->CFGR = 0x001D040A;

  • 再次运行,好了。定时器也正确,串口波特率也正确。 虽然表面上执行成功了。但是没有找到根,希望在后续仿真中,不要再遇到坑了。
    更希望疫情早日结束,正常开学,从此不用再仿真。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部