STM32
直播中

邓长生

10年用户 925经验值
擅长:可编程逻辑
私信 关注
[问答]

如何使用STM32CubeMX生成SW4STM32工程呢

STM32CubeMX具有哪些优点?

如何使用STM32CubeMX生成SW4STM32工程呢?

回帖(1)

贾绰

2021-10-14 14:17:50
  系统:linux mint 18.3 xfce 64bit
  软件:
  STM32CubeMX 4.24
  SW4STM32 2.4
  开发板芯片:STM32F103RCT6,STM32F407VET6
  实现效果:打开两个串口助手窗口,一个是USART1的,一个是USART2的,任意一个串口(串口1或者串口2)发送数据过去就会马上通过该串口返回来。
  开篇语:
  使用STM32CubeMX和SW4STM32具有的优点:
  (1)跨平台开发的优势,win和linux系统都有现成的安装包,安装sw4stm32过程会提升自动安装STLINK驱动
  (2)版本升级积极,我觉得这是一个好现象,说明开发者很重视
  (3)最重要的是免费!!!不用到处找破解激活
  (1)使用STM32CubeMX在Pinout配置好TIM3,PA8、PD2(LED灯)、USART1、USART2,
  
  (2)时钟配置保持默认
  
  (3)设置TIM1时钟,效果是1s进入一次中断
  
  (4)USART1、USART2波特率等置保持不变,设置NVIC,如下图,注意优先级
  
  
  (5)然后生成SW4STM32工程
  
  (6)使用sw4stm32打开工程
  在main.c 添加三处代码,具体位置请大家看提示,整个main.c文件太多就不贴了
  /* USER CODE BEGIN PV */
  /* Private variables ---------------------------------------------------------*/
  uint8_t aTxBuffer[]=“*********串口发送数据××××××××××××rn”;
  uint8_t aRxBuffer1[1]; // 用来接收串口1发送的数据
  uint8_t aRxBuffer2[1]; // 用来接收串口2发送的数据
  /* USER CODE END PV */
  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  HAL_UART_Receive_IT(&huart1,aRxBuffer1,1); // Enable the USART1 Interrupt
  HAL_UART_Receive_IT(&huart2,aRxBuffer2,1); // Enable the USART2 Interrupt
  HAL_UART_Transmit(&huart1,aTxBuffer,sizeof(aTxBuffer),100);
  HAL_UART_Transmit(&huart2,aTxBuffer,sizeof(aTxBuffer),100);
  HAL_TIM_Base_Start_IT(&htim3); // 启动定时器3
  while (1)
  {
  /* USER CODE END WHILE */
  /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
  /* USER CODE BEGIN 4 */
  void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  {
  if(huart-》Instance == USART1) // 判断是由哪个串口触发的中断
  {
  HAL_UART_Transmit(&huart1,aRxBuffer1,1,100); // 接收到数据马上使用串口1发送出去
  HAL_UART_Receive_IT(&huart1,aRxBuffer1,1); // 重新使能串口1接收中断
  }
  if(huart-》Instance == USART2)
  {
  HAL_UART_Transmit(&huart2,aRxBuffer2,1,100); // 接收到数据马上使用串口1发送出去
  HAL_UART_Receive_IT(&huart2,aRxBuffer2,1); // 重新使能串口2接收中断
  }
  }
  void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  {
  if(htim-》Instance == TIM3) // 判断是由哪个定时器触发的中断
  {
  HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_8);
  }
  }
  /* USER CODE END 4 */
  如果发现无法实现效果,请检查自己的硬件连接是否正确,还有就是检查USB转TTL是否正常,我就遇到了我的USB转TTL竟然能接收STM32发来的数据但是发送不出去数据,折腾了一晚上,第二天换了个串口线测试是正常的。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分