我使用STCubeMX爲我的nucleo-f446ZE(STM32F446ZET6)創建了一個簡單的項目。HAL_GetTick()crash mcu
該項目應該是USB設備HID,但無法啓動。在調試器搞亂了之後,我發現單片機的PC寄存器變爲0x00000000或0xFFFFFFFF,有時也是隨機的無效值。
我沒有修改任何代碼。我使用MDK-ARM(修改後的GCC,Vision IDE)和GCC(openSTM32)編譯代碼,發生同樣的事情。
調用堆棧:
- 主要
- SystemClock_Config
- HAL_RCC_ClockConfig(632)
- Hal_GetTick
PS:爲什麼程序做 RAM得到0x080149A後和損壞奇怪的東西圖片
解決方案
CubeMX沒有設置時鐘非常好。這裏是我用來製作usb的設置。
//RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
//RCC_OscInitStruct.HSIState = RCC_HSI_ON;
//RCC_OscInitStruct.HSICalibrationValue = 16;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 192;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
RCC_OscInitStruct.PLL.PLLQ = 4;
RCC_OscInitStruct.PLL.PLLR = 2;
默認'HAL_GetTick()'實現只返回在SYSTICK中斷遞增計數器值。 (但可以被覆蓋 - 它被聲明爲「弱」鏈接)。在選擇的反彙編窗口中使用「step-into」插入彙編級別。還要檢查是否有足夠的堆棧分配,並且堆棧沒有中斷(在調用之前或期間)。 – Clifford