以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
从您给出的代码和描述来看,程序似乎死在了delay_ms函数中的while循环里。这可能是由于以下几个原因造成的:
时钟配置问题:确保您的时钟配置是正确的,特别是AHB、APB1和APB2时钟分频器的配置。如果时钟配置不正确,可能会导致某些功能无法正常工作。请检查图5中的时钟初始化代码是否正确。SysTick配置问题:在delay_ms函数中,您使用了SysTick来进行延时。请确保SysTick的配置是正确的。特别是SysTick->CTRL|=1<<0;这一行应该启动SysTick定时器,但是您需要确认是否在正确的地方重置了SysTick的值(例如SysTick->VAL=0;)。此外,延时时间的计算也可能存在问题,您应该确保SysTick->LOAD的值正确计算。GPIO配置问题:检查GPIO的配置是否正确。包括GPIO的模式(输出、输入等)、引脚号、速度和上拉/下拉电阻的配置。图1中的GPIO配置代码看起来没有明显的错误,但请确保所有的配置都是正确的。编译器警告:您的代码中存在一些编译器警告,如“last line of file ends without a newline”。虽然这些警告不会导致程序崩溃,但它们可能会影响代码的某些功能或导致其他问题。请解决这些警告,并确保所有的代码都正确编写和格式化。硬件问题:如果以上软件问题都已排除,那么可能是硬件问题导致的。确保您的STM32硬件连接是正确的,并且正常工作。
为了进一步帮助您解决问题,建议您使用调试器逐步调试程序,查看变量的值、寄存器的状态等,以确定程序在哪一步停止执行。此外,检查您的编译器设置和库文件是否正确配置也很重要。
希望这些建议能帮助您解决问题!如果您还有其他问题或需要进一步的帮助,请告诉我。