STM32
直播中

张燕

7年用户 1336经验值
私信 关注
[问答]

如何对CubeMX工程进行初始化呢

如何对CubeMX工程进行初始化呢?有哪些操作步骤?

回帖(1)

苏天兰

2021-11-5 11:16:53
  1:CubeMX初始化
  在上一次基础上,打开CubeMx工程选择对应的引脚设置为串口通信。通信模式修改为异步通信(Asynchronous)。通信波特率设置为115200。
  
  初始化串口中断函数。
  
  2:添加代码逻辑
  (1) print输出重定向:
  usart.h中添加
  /* USER CODE BEGIN Includes */
  #include 《stdio.h》
  /* USER CODE END Includes */
  /* USER CODE BEGIN Prototypes */
  int fputc(int ch, FILE *f);
  int fgetc(FILE *f);
  /* USER CODE END Prototypes */
  usart.c中添加
  /**
  * 函数功能: 重定向c库函数printf到DEBUG_USARTx
  * 输入参数: 无
  * 返 回 值: 无
  * 说 明:无
  */
  int fputc(int ch, FILE *f)
  {
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
  return ch;
  }
  /**
  * 函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx
  * 输入参数: 无
  * 返 回 值: 无
  * 说 明:无
  */
  int fgetc(FILE *f)
  {
  uint8_t ch = 0;
  HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
  return ch;
  }
  main函数中添加:输出个000
  /* USER CODE BEGIN 3 */
  printf(“000”);
  HAL_Delay(1000);
  HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
  /* USER CODE END 3 */
  重写串口接收中断函数。
  /* USER CODE BEGIN 4 */
  void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  {
  //串口接收到数据触发。
  }
  /* USER CODE END 4 */
  3:通信测试
  测试正常。串口会每隔一秒发送一组 000。板子上的LED灯也会每秒变换一个状态。
  初次测试失败原因分析:
  最开始以为我们的板子有问题,接收到的数据总是不对(之前的买一个开发板上有同款芯片,威廉希尔官方网站 也是一样的,当时那个开发板送了一个串口转U口的转换器,和开发板通信正常),如果加上USB上的电源线,会一直收到00,不加的时候数据也是接受不对,没发现啥规律。为此还更换了一个芯片,发现没啥变化。
  后来用示波器测试发现,如果不加转换器,芯片发出的电平信号正常;但使用这个转换器的时候,Max3232CE芯片发出的波形负向电平会很高,转换器会忽略那些信号,所以接收到是数据总是不对。更换之前常用的转换器,数据接收正常。
  这个图是开发板的图,我们的板子原理图和这个一样。
  
  这个是开发板赠送的232转串口的转换器。这是一个CH4300芯片。
举报

更多回帖

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