你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32WL55双核烧录过程的问题及解决办法

[复制链接]
攻城狮Melo 发布时间:2024-5-25 14:23
这两天在使用STM32WL55JC芯片,板子是ST提供的评估板,在官网的介绍中得知这是一块多核芯片,其中搭载着一块协核M0+,M4的主核和M0+的协核都可以单独的工作。

我们在使用CubeMX的过程中也可以发现,CubeMX中有开启多核的选项。

微信图片_20240525142304.png

在这其中我们可以配置各个核心的功能。

微信图片_20240525142301.png

我们正常的创建完任务之后,配置好各个功能就开始我们的踩坑之旅。

STlink连接和烧录问题(已解决)

微信图片_20240525142258.png

我们进入工程之后,由于我们开启了双核,因此两个工程是分开的,二维码默认打开的是M0的工程。而我们的STlink挂载的是在M4的核上,这就是为什么我如果开启单核工程的话STlink是可以正常使用的,并且使用STM32CubeProgrammer也是可以正常连接正常烧录的。

微信图片_20240525142255.png

但是偏偏开启了双核工程之后就无法使用,我开始还以为是芯片开启了低功耗模式中的休眠模式或者芯片自锁,试了好多方法都没办法解决。

微信图片_20240525142252.png

反正这个问题困扰了我一晚上。查询了许多手册和资料也没有解决这个问题。直到看见了官网上的一句:STlink挂载在M4的主核上,因此突然想起来默认的工程是M0+(之前也没试过这种多核的工程)

微信图片_20240525142249.png

因此将M4工程设为主工程,之后发现就可以正常的检测到 Stlink了。

微信图片_20240525142245.png

这里注意的是,我们还需要更新一下我们的STlink固件。

连接上我们的Stlink之后,我们就可以正常的烧录了,然后M0+的核也就连的上了,不知道是不是因为之前板载代码的问题,总而言之这里是解决了烧录问题。

不过后面还有更奇怪的问题。

我在While里面加了GPIO翻转的代码。
  1.   while (1)
  2.   {
  3.     /* USER CODE END WHILE */


  4.     /* USER CODE BEGIN 3 */
  5.     HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_11);
  6.     HAL_Delay(500);
  7.   }
复制代码

首先需要说明的是,这个IO确定是LED的IO,而且我也配置了GPIO的配置。

微信图片_20240525142242.png

但是LED不亮,不清楚是什么的原因,但是程序中是有关于CubeMX的GPIO初始化函数,然后我以为是程序卡住了,调用Debug之后发现程序是可以正常运行的。但是LED还是没有反应。

于是这时候突然怀疑是GPIO初始化的问题。

CubeMX的GPIO初始化问题(未解决)
  1. void MX_GPIO_Init(void)
  2. {

  3.   /* GPIO Ports Clock Enable */
  4.   __HAL_RCC_GPIOC_CLK_ENABLE();
  5.   __HAL_RCC_GPIOB_CLK_ENABLE();

  6. }
复制代码


这时候发现GPIO的初始化函数居然是空的,这也是我第一次遇到CubeMX生成的函数初始化失败的过程。

于是自己补全了GPIO初始化的过程。
  1. void MX_GPIO_Init(void)
  2. {

  3.   GPIO_InitTypeDef GPIO_InitStruct;
  4.   HAL_RCC_GPIOC_CLK_ENABLE();
  5.   HAL_RCC_GPIOB_CLK_ENABLE();
  6.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9|GPIO_PIN_11, GPIO_PIN_RESET);
  7.   GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_11;
  8.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  9.   GPIO_InitStruct.Pull = GPIO_NOPULL;
  10.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  11.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  12. }
复制代码

这时候LED就可以正常使用了,这时候给第二个核配置LED也可以正常使用了。

后面开启USART的时候,发现其配置了USART,但是GPIO的内容依旧是空的。
  1. void MX_USART1_UART_Init(void)
  2. {

  3.   /* USER CODE BEGIN USART1_Init 0 */

  4.   /* USER CODE END USART1_Init 0 */

  5.   /* USER CODE BEGIN USART1_Init 1 */

  6.   /* USER CODE END USART1_Init 1 */
  7.   huart1.Instance = USART1;
  8.   huart1.Init.BaudRate = 115200;
  9.   huart1.Init.WordLength = UART_WORDLENGTH_8B;
  10.   huart1.Init.StopBits = UART_STOPBITS_1;
  11.   huart1.Init.Parity = UART_PARITY_NONE;
  12.   huart1.Init.Mode = UART_MODE_TX_RX;
  13.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  14.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  15.   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  16.   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  17.   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  18.   if (HAL_UART_Init(&huart1) != HAL_OK)
  19.   {
  20.     Error_Handler();
  21.   }
  22.   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  23.   {
  24.     Error_Handler();
  25.   }
  26.   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  27.   {
  28.     Error_Handler();
  29.   }
  30.   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
  31.   {
  32.     Error_Handler();
  33.   }
  34.   /* USER CODE BEGIN USART1_Init 2 */

  35.   /* USER CODE END USART1_Init 2 */

  36. }
复制代码

微信图片_20240525142238.png


然后试过了,如果不分开文件的话初始化也是没有GPIO的初始化内容。

微信图片_20240525142235.png

微信图片_20240525142232.png

转载自: 电路小白
如有侵权请联系删除



收藏 评论0 发布时间:2024-5-25 14:23

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版