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;
-
再次运行,好了。定时器也正确,串口波特率也正确。 虽然表面上执行成功了。但是没有找到根,希望在后续仿真中,不要再遇到坑了。
更希望疫情早日结束,正常开学,从此不用再仿真。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
