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

【经验分享】STM32L0 HAL 串口问题

[复制链接]
STMCU小助手 发布时间:2021-11-17 22:01
这两天在玩STM32L0,但是串口怎么调试都有问题。数据位选择8B,显示如下:

20171012172256850.png


数据位选择7B时:

20171012172441346.png


而我的输出应该是:printf("123456\n");printf("testing\n");
下面时我的程序:

  1. //时钟初始化
  2. void SystemClockConfig( void )
  3. {
  4.     RCC_OscInitTypeDef RCC_OscInitStruct;
  5.     RCC_ClkInitTypeDef RCC_ClkInitStruct;
  6.     RCC_PeriphCLKInitTypeDef PeriphClkInit;
  7.         
  8.                
  9.         __HAL_RCC_SYSCFG_CLK_ENABLE( );
  10.     __HAL_RCC_PWR_CLK_ENABLE( );

  11.     __HAL_PWR_VOLTAGESCALING_CONFIG( PWR_REGULATOR_VOLTAGE_SCALE1 );
  12. //                __HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);
  13.         
  14.     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE;//内部高速时钟8M 和 外部低速32.768K
  15.     RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  16.     RCC_OscInitStruct.LSEState = RCC_LSE_ON;
  17.     RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  18.     RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  19.     RCC_OscInitStruct.PLL.PLLMUL = RCC_PLLMUL_4;
  20.     RCC_OscInitStruct.PLL.PLLDIV = RCC_PLLDIV_2;
  21.     if( HAL_RCC_OscConfig( &RCC_OscInitStruct ) != HAL_OK )
  22.     {
  23.         assert_param( FAIL );
  24.     }

  25.     RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  26.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  27.     RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  28.     RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  29.     RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  30.     RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  31.     if( HAL_RCC_ClockConfig( &RCC_ClkInitStruct, FLASH_LATENCY_1 ) != HAL_OK )
  32.     {
  33.         assert_param( FAIL );
  34.     }

  35.     PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1 | RCC_PERIPHCLK_I2C1 | RCC_PERIPHCLK_RTC;
  36.     PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK2;
  37.     PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_PCLK1;
  38.     PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
  39.     if( HAL_RCCEx_PeriphCLKConfig( &PeriphClkInit ) != HAL_OK )
  40.     {
  41.         assert_param( FAIL );
  42.     }

  43.     HAL_SYSTICK_Config( HAL_RCC_GetHCLKFreq( ) / 1000 );

  44.     HAL_SYSTICK_CLKSourceConfig( SYSTICK_CLKSOURCE_HCLK );

  45.     // SysTick_IRQn interrupt configuration
  46.     HAL_NVIC_SetPriority( SysTick_IRQn, 0, 0 );
  47. }
复制代码

UART.C
  1. /******************************************************************************
  2. * Copyright 2017-2030 DaPu Co.
  3. * FileName:          uart_new.c
  4. * Desc:
  5. *
  6. *
  7. * Author:          CGH
  8. * Date:          2017/10/12
  9. * Notes:
  10. *
  11. * -----------------------------------------------------------------
  12. * Histroy: v1.0   2017/10/12, CGH create this file
  13. *
  14. ******************************************************************************/
  15. /*------------------------------- Includes ----------------------------------*/
  16. #include "board.h"
  17. #include "uart_new.h"
  18. #include "gpio.h"
  19. #include "delay.h"
  20. /*------------------- Global Definitions and Declarations -------------------*/
  21. /*------------------------ Constant / Macro Definitions ---------------------*/
  22. /*------------------------- Type Declarations -------------------------------*/
  23. /*------------------------- Function Prototype ------------------------------*/
  24. /*------------------------- Variable Declarations ---------------------------*/
  25. UART_HandleTypeDef husart_debug;
  26. uint8_t RxDatabuf;
  27. /*------------------------- Function Implement ------------------------------*/
  28. /**
  29.   * 函数功能: 串口硬件初始化配置
  30.   * 输入参数: huart:串口句柄类型指针
  31.   * 返 回 值: 无
  32.   * 说    明: 该函数被HAL库内部调用
  33.   */
  34. void HAL_UART_MspInit(UART_HandleTypeDef* huart)
  35. {

  36.   GPIO_InitTypeDef GPIO_InitStruct;
  37.   Gpio_t TX,RX;

  38.   if(huart->Instance==DEBUG_USARTx)
  39.   {
  40.     /* 串口外设时钟使能 */
  41.     DEBUG_USART_RCC_CLK_ENABLE();

  42.     DEBUG_USARTx_GPIO_ClK_ENABLE();

  43.     /* 串口外设功能GPIO配置 */
  44.     //GpioInit( &TX, UART_TX, PIN_ALTERNATE_FCT, PIN_PUSH_PULL, PIN_PULL_UP, GPIO_AF4_USART1 );
  45.     //GpioInit( &RX, UART_RX, PIN_INPUT, PIN_PUSH_PULL, PIN_PULL_UP, GPIO_AF4_USART1 );  

  46.     GPIO_InitStruct.Pin = DEBUG_USARTx_Tx_GPIO_PIN;
  47.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  48.     GPIO_InitStruct.Pull = GPIO_AF4_USART1;
  49.     GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  50.     GPIO_InitStruct.Alternate = GPIO_AF4_USART1;
  51.     HAL_GPIO_Init(DEBUG_USARTx_Tx_GPIO, &GPIO_InitStruct);

  52.     GPIO_InitStruct.Pin = DEBUG_USARTx_Rx_GPIO_PIN;
  53.     GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  54.     //GPIO_InitStruct.Pull = GPIO_NOPULL;
  55.     GPIO_InitStruct.Alternate = GPIO_AF4_USART1;
  56.     HAL_GPIO_Init(DEBUG_USARTx_Rx_GPIO, &GPIO_InitStruct);

  57.     GpioWrite(&Led2,1);
  58.     Delay(3);
  59.   }
  60. }

  61. /**
  62.   * 函数功能: 串口硬件反初始化配置
  63.   * 输入参数: huart:串口句柄类型指针
  64.   * 返 回 值: 无
  65.   * 说    明: 该函数被HAL库内部调用
  66.   */
  67. void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
  68. {
  69.   if(huart->Instance==DEBUG_USARTx)
  70.   {
  71.     /* 串口外设时钟禁用 */
  72.     DEBUG_USART_RCC_CLK_DISABLE();

  73.     /* 串口外设功能GPIO配置 */
  74.     HAL_GPIO_DeInit(DEBUG_USARTx_Tx_GPIO, DEBUG_USARTx_Tx_GPIO_PIN);
  75.     HAL_GPIO_DeInit(DEBUG_USARTx_Rx_GPIO, DEBUG_USARTx_Rx_GPIO_PIN);

  76.     /* 串口中断禁用 */
  77.     HAL_NVIC_DisableIRQ(DEBUG_USART_IRQn);
  78.   }
  79. }

  80. /**
  81.   * 函数功能: 串口参数配置.
  82.   * 输入参数: 无
  83.   * 返 回 值: 无
  84.   * 说    明:无
  85.   */
  86. void MX_DEBUG_USART_Init(void)
  87. {
  88.     int ret = -1;

  89.     __HAL_RCC_USART1_FORCE_RESET( );
  90.     __HAL_RCC_USART1_RELEASE_RESET( );
  91.     __HAL_RCC_USART1_CLK_ENABLE( );
  92.     /* 使能串口功能引脚GPIO时钟 */
  93.     DEBUG_USARTx_GPIO_ClK_ENABLE();

  94.     husart_debug.Instance = DEBUG_USARTx;
  95.     husart_debug.Init.BaudRate = DEBUG_USARTx_BAUDRATE;
  96.     husart_debug.Init.WordLength = UART_WORDLENGTH_8B;
  97.     husart_debug.Init.StopBits = UART_STOPBITS_1;
  98.     husart_debug.Init.Parity = UART_PARITY_NONE;
  99.     husart_debug.Init.Mode = UART_MODE_TX_RX;
  100.     husart_debug.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  101.     husart_debug.Init.OverSampling = UART_OVERSAMPLING_16;
  102.     ret = HAL_UART_Init(&husart_debug);
  103.     if(ret != HAL_OK)
  104.     {
  105.         GpioWrite(&Led2,0);
  106.     }
  107.     else
  108.     {
  109.          GpioWrite(&Led3,1);
  110.     }
  111.     /* 串口中断起用 */

  112.     HAL_NVIC_SetPriority( USART1_IRQn, 1, 0 );
  113.     HAL_NVIC_EnableIRQ( USART1_IRQn );

  114.     /* Enable the UART Data Register not empty Interrupt */
  115.     HAL_UART_Receive_IT( &husart_debug, &RxDatabuf, 1 );
  116. }
复制代码

UART.H
  1. /******************************************************************************
  2. * Copyright 2017-2030 DaPu Co.
  3. * FileName:          uart_new.h
  4. * Desc:
  5. *
  6. *
  7. * Author:          CGH
  8. * Date:          2017/10/12
  9. * Notes:
  10. *
  11. * -----------------------------------------------------------------
  12. * Histroy: v1.0   2017/10/12, CGH create this file
  13. *
  14. ******************************************************************************/
  15. #ifndef        UART_NEW_H
  16. #define        UART_NEW_H
  17. /*------------------------------- Includes ----------------------------------*/
  18. #include "stm32l0xx_hal.h"
  19. #include <stdio.h>

  20. /*----------------------------- Global Defines ------------------------------*/
  21. #define DEBUG_USARTx                                 USART1
  22. #define DEBUG_USARTx_BAUDRATE                        9600
  23. #define DEBUG_USART_RCC_CLK_ENABLE()                 __HAL_RCC_USART1_FORCE_RESET();\\
  24.                                                          __HAL_RCC_USART1_RELEASE_RESET();\\
  25.                                                          __HAL_RCC_USART1_CLK_ENABLE()
  26. #define DEBUG_USART_RCC_CLK_DISABLE()                __HAL_RCC_USART1_CLK_DISABLE()

  27. #define DEBUG_USARTx_GPIO_ClK_ENABLE()               __HAL_RCC_GPIOA_CLK_ENABLE()
  28. #define DEBUG_USARTx_Tx_GPIO_PIN                     GPIO_PIN_9
  29. #define DEBUG_USARTx_Tx_GPIO                         GPIOA
  30. #define DEBUG_USARTx_Rx_GPIO_PIN                     GPIO_PIN_10
  31. #define DEBUG_USARTx_Rx_GPIO                         GPIOA

  32. #define DEBUG_USART_IRQn                             USART1_IRQn

  33. /*----------------------------- Global Typedefs -----------------------------*/
  34. /*----------------------------- External Variables --------------------------*/
  35. extern UART_HandleTypeDef husart_debug;

  36. /*------------------------ Global Function Prototypes -----------------------*/
  37. extern void MX_DEBUG_USART_Init(void);


  38. #endif
复制代码


收藏 评论0 发布时间:2021-11-17 22:01

举报

0个回答

所属标签

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