前段时间不是因为查定时器发现自己手上的芯片是盗版STM32嘛,然后也不能烧录,根据网上的解决方法导入了某块芯片库然后就可以用STlink进行烧录,但是依旧遇到了很多问题。
由于手上的项目需要用C8T6部署FreeRTOS,而手上仅有这块芯片,于是就选择使用这块芯片跑RTOS,本来想着如果能烧录的话跑RTOS应该是没有什么问题的。
但是我发现我的RTOS任务一旦开始调度,就会死机。
开始我以为是C8T6的堆栈溢出问题,搜了很多解决办法都没能解决掉我的问题。
甚至最简单的,只有一个任务的RTOS也无法启动。这很显然已经不是简单的堆栈溢出的问题了。
于是从实验室问学弟借了一块正版的STM32F103C8T6,其丝印相较于之前那块C8T6也显得格外的清晰。
并且由STlink所读取的IDCODE也是以0x1B开头的。
并不像之前那块芯片以0x2B开头的盗版芯片。
于是利用CubeMX进行初始化之后。在默认任务中将LED灯翻转。
void StartDefaultTask(void *argument){ /* USER CODE BEGIN StartDefaultTask */ /* Infinite loop */ for(;;) { HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_13); osDelay(1000); } /* USER CODE END StartDefaultTask */}
代码也是可以正常运行,并不会出现之前的那种代码无法运行卡死的情况。
所以应该是盗版STM32芯片导致的RTOS无法启动,并且定时器的启动也是有非常大的问题。
本来这几天是想出一期STM32F103C8T6一个FreeRTOS实战项目的,但是由于之前的盗版芯片问题,任务始终跑不起来,因此一直耽误了好几天的时间。