CUBEMX设置如上。 回调函数如下:
调用代码如下:
效果图如下: 串口助手收到1后不再接收并且卡死无反应,引脚正常翻转,回调函数正常执行。 |
如需获得 STM32H743zit6 等器件的更多信息,请点击链接或 点击此处 联系在线客服!
你看看开启了哪些中断? 如果只是使用了TIM2,看你在它的回调函数里又调用 了HAL_TIM_Base_Start_IT(&htim2); 难道你该回调函数之外做了TIM2的关闭操作?不过,这个操作应该 不是问题关键,只是写在这里又开启一次TIM2及中断有点费解。 另外,USB_printf()函数是怎么实现的?涉及到中断了吗? 建议干脆将这两个Printf调用换成2个全局变量来观察变化 并试着锁定原因。
Counter Period=4-1 则定时器的计数值为3,这么短的定时时间,当然一直进入定时器中断。
你看看开启了哪些中断?
#include void USB_printf(const char *format,...) { va_list args; uint32_t length; va_start(args,format); length = vsnprintf((char *)UserTxBufferFS,APP_TX_DATA_SIZE,(char *)format,args); va_end(args); while(CDC_Transmit_FS(UserTxBufferFS,length) != USBD_OK); // CDC_Transmit_FS(UserTxBufferFS,length); } usb是虚拟串口prinft重定义函数。由TIM2定时器产生的中断可以成功的翻转引脚电平,TIM2的中断是没有问题的。是TIM2的中断制止了其他中断和程序正常运行了。 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim->Instance == TIM2) { LL_GPIO_TogglePin(CLK_GPIO_Port,CLK_Pin); } } 回调函数就是在翻转引脚电平
Counter Period=4-1则定时器的计数值为3,这么短的定时时间,当然一直进入定时器中断。
[md]我需要一个40MHz的时钟信号,时钟树里的总线是240MHz。只能这么短了吧
如果是4OMhz 的翻转信号,估算一下间隔超短,中断执行不了几行代码了。所以多半中断阻塞住了。 楼主还是考虑用其他硬件方式实现这样的时钟信号吧。
如果是4OMhz 的翻转信号,估算一下间隔超短,中断执行不了几行代码了。所以多半中断阻塞住了。 楼主还是考 ...
说错了4MHz,但好像1MHz都达不到卡在800KHz了。