• stm32L4xx串口日志配置解析


    前言: 

         st这两年推出了一款超低功耗的芯片,stm32l4xx系列,该系列芯片有着功耗低,尺寸小等特点,非常适合应用在可穿戴式设备。

    团队在这一领域深耕,所以不可避免的要用到这款芯片,这里就针对该芯片做一些技术总结。

    硬件:

      串口的的硬件非常简单,这里我们用串口1做日志打印,对应的硬件接口就如图所示了。这里的PA9 P10是对应的串口1的tx和rx

    软件:

      1 串口初始化,串口初始化一般是初始化一些串口状态,代码如下所示:

      huart1.Instance = USART1;
    
      huart1.Init.BaudRate = 115200;
      huart1.Init.WordLength = UART_WORDLENGTH_8B;
      huart1.Init.StopBits = UART_STOPBITS_1;
      huart1.Init.Parity = UART_PARITY_NONE;
      //huart1.Init.Mode = UART_MODE_RX;//UART_MODE_TX_RX;
      huart1.Init.Mode = UART_MODE_TX_RX;
      huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
      huart1.Init.OverSampling = UART_OVERSAMPLING_16;
      huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
      huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
      if (HAL_UART_Init(&huart1) != HAL_OK)
      {
        Error_Handler();
      }

      2 IO映射,这部分一般需要自己配置,很容易漏掉。

    void HAL_UART_MspInit(UART_HandleTypeDef* huart)
    {
      GPIO_InitTypeDef GPIO_InitStruct = {0};
      if(huart->Instance==USART1)
      {
      /* USER CODE BEGIN USART1_MspInit 0 */
    
      /* USER CODE END USART1_MspInit 0 */
        /* Peripheral clock enable */
        __HAL_RCC_USART1_CLK_ENABLE();
    
        __HAL_RCC_GPIOA_CLK_ENABLE();
        /**USART1 GPIO Configuration
        PA9     ------> USART1_TX
        PA10     ------> USART1_RX
        */
        //GPIO_InitStruct.Pin = GPIO_PIN_10;//GPIO_PIN_9|
        GPIO_InitStruct.Pin = GPIO_PIN_10 | GPIO_PIN_9;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
        GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

      3 打印函数:

      该函数是串口输出底层函数,经常看到的printf都是映射过来的。

      uint8_t data[30] = "welcome to whale_audio_v12 \n\r";
      HAL_UART_Transmit(&huart1, data, sizeof(data), 0xffffffff);
     这里有一个映射函数,一定要重写,不然,printf是使用不了的
    /* Private user code ---------------------------------------------------------*/
    /* USER CODE BEGIN 0 */
    int fputc(int c, FILE *stream)    //重写fputc函数
    {
     /*
        huart1是工具生成代码定义的UART1结构体,
        如果以后要使用其他串口打印,只需要把这个结构体改成其他UART结构体。
    */
        HAL_UART_Transmit(&huart1, (unsigned char *)&c, 1, 1000);   
        return 1;
    }

     
  • 相关阅读:
    委托,匿名方法,Lambda,泛型委托,表达式树
    Winform 异步调用一个方法
    计算两个经纬度的直线距离
    多线程中线程同步的几种方式
    音频文件相关
    c# 语音(二)文字生成WAV文件
    c# 语音
    三种创建委托的方式
    RunLoop 再次 探索与源码简析
    SDWebImage 实现原理与源码简析
  • 原文地址:https://www.cnblogs.com/dylancao/p/15899888.html
Copyright © 2020-2023  润新知