• STM32F0使用LL库实现UART接收


    初始化:

     1 void MX_USART1_UART_Init(void)
     2 {
     3 
     4   /* USER CODE BEGIN USART1_Init 0 */
     5 
     6   /* USER CODE END USART1_Init 0 */
     7 
     8   LL_USART_InitTypeDef USART_InitStruct = {0};
     9 
    10   LL_GPIO_InitTypeDef GPIO_InitStruct = {0};
    11 
    12   /* Peripheral clock enable */
    13   LL_APB1_GRP2_EnableClock(LL_APB1_GRP2_PERIPH_USART1);
    14   
    15   LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_GPIOA);
    16 
    17   LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1);
    18   /**USART1 GPIO Configuration  
    19   PA9   ------> USART1_TX
    20   PA10   ------> USART1_RX 
    21   */
    22   GPIO_InitStruct.Pin = LL_GPIO_PIN_9;
    23   GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
    24   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    25   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
    26   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
    27   GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
    28   LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    29 
    30   GPIO_InitStruct.Pin = LL_GPIO_PIN_10;
    31   GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
    32   GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
    33   GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
    34   GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
    35   GPIO_InitStruct.Alternate = LL_GPIO_AF_1;
    36   LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    37 
    38   /* USART1 DMA Init */
    39   LL_DMA_DeInit(DMA1, LL_DMA_CHANNEL_3);
    40   /* USART1_RX Init */
    41   LL_DMA_SetDataTransferDirection(DMA1, LL_DMA_CHANNEL_3, LL_DMA_DIRECTION_PERIPH_TO_MEMORY);
    42 
    43   LL_DMA_SetChannelPriorityLevel(DMA1, LL_DMA_CHANNEL_3, LL_DMA_PRIORITY_LOW);
    44 
    45   LL_DMA_SetMode(DMA1, LL_DMA_CHANNEL_3, LL_DMA_MODE_NORMAL);
    46 
    47   LL_DMA_SetPeriphIncMode(DMA1, LL_DMA_CHANNEL_3, LL_DMA_PERIPH_NOINCREMENT);
    48 
    49   LL_DMA_SetMemoryIncMode(DMA1, LL_DMA_CHANNEL_3, LL_DMA_MEMORY_INCREMENT);
    50 
    51   LL_DMA_SetPeriphSize(DMA1, LL_DMA_CHANNEL_3, LL_DMA_PDATAALIGN_BYTE);
    52 
    53   LL_DMA_SetMemorySize(DMA1, LL_DMA_CHANNEL_3, LL_DMA_MDATAALIGN_BYTE);
    54 
    55   /* USER CODE BEGIN USART1_Init 1 */
    56   LL_DMA_SetMemoryAddress(DMA1,LL_DMA_CHANNEL_3,(uint32_t)g_sSecUartInfo.ucRbuf);
    57   LL_DMA_SetPeriphAddress(DMA1,LL_DMA_CHANNEL_3,(uint32_t)&USART1->RDR);
    58   LL_DMA_SetDataLength(DMA1,LL_DMA_CHANNEL_3,Sec_UART_MAX_LEN); 
    59 
    60   /* USER CODE END USART1_Init 1 */
    61   USART_InitStruct.BaudRate = 1200;
    62   USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;
    63   USART_InitStruct.StopBits = LL_USART_STOPBITS_1;
    64   USART_InitStruct.Parity = LL_USART_PARITY_NONE;
    65   USART_InitStruct.TransferDirection = LL_USART_DIRECTION_RX;
    66   USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;
    67   USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;
    68   LL_USART_Init(USART1, &USART_InitStruct);
    69   LL_USART_DisableIT_CTS(USART1);
    70   LL_USART_ConfigAsyncMode(USART1);
    71   LL_USART_Enable(USART1);
    72   /* USER CODE BEGIN USART1_Init 2 */
    73   LL_USART_EnableDMAReq_RX(USART1);
    74   LL_DMA_EnableChannel(DMA1,LL_DMA_CHANNEL_3);
    75   /* USER CODE END USART1_Init 2 */
    76 
    77 }

    数据处理:

    
    

    if(LL_DMA_IsActiveFlag_TC3(DMA1))
    {
    LL_DMA_ClearFlag_GI3(DMA1);

    LL_DMA_DisableChannel(DMA1,LL_DMA_CHANNEL_3);
    LL_DMA_SetDataLength(DMA1,LL_DMA_CHANNEL_3,Sec_UART_MAX_LEN);
    LL_DMA_EnableChannel(DMA1,LL_DMA_CHANNEL_3);
    }

     
  • 相关阅读:
    Linux 设置主机名和 IP 地址的映射关系
    Zookeeper 数据查看工具 ZooInspector 的使用
    Zookeeper 集群
    Zookeeper 监控指定节点数据变化
    Zookeeper 常用命令
    Spring整合ActiveMQ持久化到Mysql数据库
    Activemq5.15.5持久化到mysql8.0.20
    ActiveMQ支持的协议
    SIGINT SIGTERM SIGKILL区别
    lograte -日志轮询log
  • 原文地址:https://www.cnblogs.com/amw2738/p/STM32F0.html
Copyright © 2020-2023  润新知