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

【STM32G491试用】03+MDK+Stm32cubeIDE双工程搞定Printf

[复制链接]
caizhiwei 发布时间:2021-3-26 09:33
     这几天一直在捣鼓板子,查资料现学现卖,觉都睡不好,一遍熟悉知识点消化,一边总结。做梦都在搞板子!由于第一次使用Hal库,第一次使用新的编译器,又在LL库的边缘徘徊,期间又切换到RTTstudio。            最初几天串口没有调试通,很郁闷,看到别的小伙伴一篇篇的优质测评帖,我心里急啊。今天,我的第三篇测评,他终于来了!

    1. 首先,来个驱动讲解吧,这里要注意的是一个回调函数,我们基本不用管就行,但是和初始化函数长得很像,初学者容易搞糊涂。
04.png
那么我们在使用的时候,main函数中调用A函数初始化即可。
C函数为回调函数,其他外设初始化的时候也会自动产生,C函数已经被B函数调用了!B函数在HAL库中。
这就是三个长得像的家伙的关系。
CubeMX有个特点,函数前都不会有啥注释的。哈哈。
下面就是初始化代码了,这个是CubeMx自动产生的:

  1. #include "usart.h"

  2. /* USER CODE BEGIN 0 */

  3. /* USER CODE END 0 */

  4. UART_HandleTypeDef hlpuart1;
  5. UART_HandleTypeDef huart1;

  6. /* LPUART1 init function */

  7. void MX_LPUART1_UART_Init(void)
  8. {

  9.   /* USER CODE BEGIN LPUART1_Init 0 */

  10.   /* USER CODE END LPUART1_Init 0 */

  11.   /* USER CODE BEGIN LPUART1_Init 1 */

  12.   /* USER CODE END LPUART1_Init 1 */
  13.   hlpuart1.Instance = LPUART1;
  14.   hlpuart1.Init.BaudRate = 115200;
  15.   hlpuart1.Init.WordLength = UART_WORDLENGTH_8B;
  16.   hlpuart1.Init.StopBits = UART_STOPBITS_1;
  17.   hlpuart1.Init.Parity = UART_PARITY_NONE;
  18.   hlpuart1.Init.Mode = UART_MODE_TX_RX;
  19.   hlpuart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  20.   hlpuart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  21.   hlpuart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  22.   hlpuart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  23.   if (HAL_UART_Init(&hlpuart1) != HAL_OK)
  24.   {
  25.     Error_Handler();
  26.   }
  27.   if (HAL_UARTEx_SetTxFifoThreshold(&hlpuart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  28.   {
  29.     Error_Handler();
  30.   }
  31.   if (HAL_UARTEx_SetRxFifoThreshold(&hlpuart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  32.   {
  33.     Error_Handler();
  34.   }
  35.   if (HAL_UARTEx_DisableFifoMode(&hlpuart1) != HAL_OK)
  36.   {
  37.     Error_Handler();
  38.   }
  39.   /* USER CODE BEGIN LPUART1_Init 2 */

  40.   /* USER CODE END LPUART1_Init 2 */

  41. }
  42. /* USART1 init function */

  43. void MX_USART1_UART_Init(void)
  44. {

  45.   /* USER CODE BEGIN USART1_Init 0 */

  46.   /* USER CODE END USART1_Init 0 */

  47.   /* USER CODE BEGIN USART1_Init 1 */

  48.   /* USER CODE END USART1_Init 1 */
  49.   huart1.Instance = USART1;
  50.   huart1.Init.BaudRate = 115200;
  51.   huart1.Init.WordLength = UART_WORDLENGTH_9B;
  52.   huart1.Init.StopBits = UART_STOPBITS_1;
  53.   huart1.Init.Parity = UART_PARITY_NONE;
  54.   huart1.Init.Mode = UART_MODE_TX_RX;
  55.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  56.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  57.   huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  58.   huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  59.   huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
  60.   if (HAL_UART_Init(&huart1) != HAL_OK)
  61.   {
  62.     Error_Handler();
  63.   }
  64.   if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  65.   {
  66.     Error_Handler();
  67.   }
  68.   if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  69.   {
  70.     Error_Handler();
  71.   }
  72.   if (HAL_UARTEx_DisableFifoMode(&huart1) != HAL_OK)
  73.   {
  74.     Error_Handler();
  75.   }
  76.   /* USER CODE BEGIN USART1_Init 2 */

  77.   /* USER CODE END USART1_Init 2 */

  78. }

  79. void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
  80. {

  81.   GPIO_InitTypeDef GPIO_InitStruct = {0};
  82.   if(uartHandle->Instance==LPUART1)
  83.   {
  84.   /* USER CODE BEGIN LPUART1_MspInit 0 */

  85.   /* USER CODE END LPUART1_MspInit 0 */
  86.     /* LPUART1 clock enable */
  87.     __HAL_RCC_LPUART1_CLK_ENABLE();

  88.     __HAL_RCC_GPIOA_CLK_ENABLE();
  89.     /**LPUART1 GPIO Configuration
  90.     PA2     ------> LPUART1_TX
  91.     PA3     ------> LPUART1_RX
  92.     */
  93.     GPIO_InitStruct.Pin = LPUART1_TX_Pin|LPUART1_RX_Pin;
  94.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  95.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  96.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  97.     GPIO_InitStruct.Alternate = GPIO_AF12_LPUART1;
  98.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  99.   /* USER CODE BEGIN LPUART1_MspInit 1 */

  100.   /* USER CODE END LPUART1_MspInit 1 */
  101.   }
  102.   else if(uartHandle->Instance==USART1)
  103.   {
  104.   /* USER CODE BEGIN USART1_MspInit 0 */

  105.   /* USER CODE END USART1_MspInit 0 */
  106.     /* USART1 clock enable */
  107.     __HAL_RCC_USART1_CLK_ENABLE();

  108.     __HAL_RCC_GPIOC_CLK_ENABLE();
  109.     /**USART1 GPIO Configuration
  110.     PC4     ------> USART1_TX
  111.     PC5     ------> USART1_RX
  112.     */
  113.     GPIO_InitStruct.Pin = GPIO_PIN_4|GPIO_PIN_5;
  114.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  115.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  116.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  117.     GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
  118.     HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  119.   /* USER CODE BEGIN USART1_MspInit 1 */

  120.   /* USER CODE END USART1_MspInit 1 */
  121.   }
  122. }

  123. void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
  124. {

  125.   if(uartHandle->Instance==LPUART1)
  126.   {
  127.   /* USER CODE BEGIN LPUART1_MspDeInit 0 */

  128.   /* USER CODE END LPUART1_MspDeInit 0 */
  129.     /* Peripheral clock disable */
  130.     __HAL_RCC_LPUART1_CLK_DISABLE();

  131.     /**LPUART1 GPIO Configuration
  132.     PA2     ------> LPUART1_TX
  133.     PA3     ------> LPUART1_RX
  134.     */
  135.     HAL_GPIO_DeInit(GPIOA, LPUART1_TX_Pin|LPUART1_RX_Pin);

  136.   /* USER CODE BEGIN LPUART1_MspDeInit 1 */

  137.   /* USER CODE END LPUART1_MspDeInit 1 */
  138.   }
  139.   else if(uartHandle->Instance==USART1)
  140.   {
  141.   /* USER CODE BEGIN USART1_MspDeInit 0 */

  142.   /* USER CODE END USART1_MspDeInit 0 */
  143.     /* Peripheral clock disable */
  144.     __HAL_RCC_USART1_CLK_DISABLE();

  145.     /**USART1 GPIO Configuration
  146.     PC4     ------> USART1_TX
  147.     PC5     ------> USART1_RX
  148.     */
  149.     HAL_GPIO_DeInit(GPIOC, GPIO_PIN_4|GPIO_PIN_5);

  150.   /* USER CODE BEGIN USART1_MspDeInit 1 */

  151.   /* USER CODE END USART1_MspDeInit 1 */
  152.   }
  153. }
复制代码
然后:重点来了:这个部分还是要自己添加才行,CubeMX还没有达到100%给你写代码的水平哦:

  1. /**
  2.   * @brief  Retargets the C library printf function to the USART.
  3.   * @param  None
  4.   * @retval None
  5.   */

  6. #ifdef __GNUC__
  7. /* With GCC, small printf (option LD Linker->Libraries->Small printf
  8.    set to 'Yes') calls __io_putchar() */
  9. #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
  10. #else
  11. #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
  12. #endif /* __GNUC__ */

  13. PUTCHAR_PROTOTYPE
  14. {
  15.   /* Place your implementation of fputc here */
  16.   /* e.g. write a character to the USART1 and Loop until the end of transmission */
  17.   HAL_UART_Transmit(&hlpuart1, (uint8_t *)&ch, 1, 0xFFFF);
  18.   return ch;
  19. }
复制代码
整个工程编译下来占用空间大小:
==============================================================================


      Code (inc. data)   RO Data    RW Data    ZI Data      Debug   

      8204        434        568         20       1316     691029   Grand Totals
      8204        434        568         20       1316     691029   ELF Image Totals
      8204        434        568         20          0          0   ROM Totals

==============================================================================

    Total RO  Size (Code + RO Data)                 8772 (   8.57kB)
    Total RW  Size (RW Data + ZI Data)              1336 (   1.30kB)
    Total ROM Size (Code + RO Data + RW Data)       8792 (   8.59kB)

==============================================================================



最后,看看效果如何:
01.png
非常完美!
整个工程代码见附件:
STM32CubeIDE.zip (1.4 MB, 下载次数: 2)
收藏 1 评论1 发布时间:2021-3-26 09:33

举报

1个回答
STMCU-管管 回答时间:2021-3-26 16:13:34
感谢分享

所属标签

相似分享

官网相关资源

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