查看: 1425|回复: 0

[评测分享] 【NUCLEO-U083RC试用】- 02-LPUART以及LPTIM的使用

[复制链接]
  • TA的每日心情
    开心
    2024-8-5 17:13
  • 签到天数: 333 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2024-6-3 15:01:55 | 显示全部楼层 |阅读模式
    分享到:
    在低功耗的器件中,LPUART以及LPTIM都扮演了重要的角色,我们几天就来说一下LPUART以及LPTIM的使用方法,
    00.png

    我们首先从外设上来看,LPUART以及LPTIM的数量都是三个,我们这里分别一LPTIM1和LPUART1作为案例来使用,关于LPUART,我们可以看看官方怎么说的。

    低功耗通用异步接收发射机(LPUART)这些设备嵌入了三个LPUART。外围设备支持具有最小功耗的异步串行通信,以及半双工单线通信和调制解调器操作(CTS/RTS)。他们允许多处理器通信。LPUART具有独立于CPU时钟的时钟域,可以从停止模式唤醒系统使用高达220 Kbaud的波特率。停止模式唤醒事件是可编程的,可以是:

    •起始位检测
    •任何接收到的数据帧
    •特定编程数据帧
    只需要32.768 kHz时钟(LSE)就可以实现高达9600波特的LPUART通信。因此,即使在在停止模式下,LPUART可以等待输入帧,同时具有极低的能耗。到达到更高的波特率时,可以使用更高速的时钟。LPUART接口可以由DMA控制器提供服务。

    按照官方的说法,LPUART是可以是用LSE的时钟作为参考到的。我们可以在低功耗下使用用LSE,在正常工作模式下使用MSI或者HSI作为主时钟。


    我们这里就直接上代码了,大家可以看看

    以下是串口的代码

    1. #include "LP_UART.h"


    2. UART_HandleTypeDef LP_UART1;

    3. void LP_UART_Init(void)
    4. {
    5.   __HAL_RCC_LPUART1_CLK_ENABLE();
    6.         __HAL_RCC_GPIOA_CLK_ENABLE();  
    7.        
    8.         //--设置复用---
    9.         GPIO_InitTypeDef  gpio_init_structure;
    10.           /* Configure USART Tx as alternate function */
    11.   gpio_init_structure.Pin       = GPIO_PIN_2;
    12.   gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
    13.   gpio_init_structure.Speed     = GPIO_SPEED_FREQ_HIGH;
    14.   gpio_init_structure.Pull      = GPIO_PULLUP;
    15.   gpio_init_structure.Alternate = GPIO_AF8_LPUART1;
    16.   HAL_GPIO_Init(GPIOA, &gpio_init_structure);

    17.   /* Configure USART Rx as alternate function */
    18.   gpio_init_structure.Pin       = GPIO_PIN_3;
    19.   gpio_init_structure.Mode      = GPIO_MODE_AF_PP;
    20.   gpio_init_structure.Alternate = GPIO_AF8_LPUART1;
    21.   HAL_GPIO_Init(GPIOA, &gpio_init_structure);
    22.        
    23.        
    24.        
    25.   LP_UART1.Instance = LPUART1;
    26.   LP_UART1.Init.BaudRate = 115200;
    27.   LP_UART1.Init.WordLength = UART_WORDLENGTH_8B;
    28.   LP_UART1.Init.StopBits = UART_STOPBITS_1;
    29.   LP_UART1.Init.Parity = UART_PARITY_NONE;
    30.   LP_UART1.Init.Mode = UART_MODE_TX_RX;
    31.   LP_UART1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    32.   LP_UART1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
    33.   LP_UART1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
    34.   LP_UART1.FifoMode = UART_FIFOMODE_DISABLE;
    35.   if (HAL_UART_Init(&LP_UART1) != HAL_OK)
    36.   {

    37.   }
    38.   if (HAL_UARTEx_SetTxFifoThreshold(&LP_UART1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
    39.   {

    40.   }
    41.   if (HAL_UARTEx_SetRxFifoThreshold(&LP_UART1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
    42.   {

    43.   }
    44.   if (HAL_UARTEx_DisableFifoMode(&LP_UART1) != HAL_OK)
    45.   {

    46.   }
    47. }


    48. void LP_UART_SendData(unsigned char *Data,unsigned int Len)
    49. {
    50.    HAL_UART_Transmit(&LP_UART1,Data,Len,200);
    51. }



    52. void LP_UART_Test(void)
    53. {
    54.    LP_UART_SendData("This is LPUART Demo!\r\n",22);
    55. }
    复制代码
    下面的是LPUART的代

    1. #include "LP_TIM.h"
    2. #include "LP_UART.h"


    3. LPTIM_HandleTypeDef LPTim1;

    4. unsigned int Enablecount=0;

    5. void LP_TIM_Init(void)
    6. {
    7.   LPTim1.Instance = LPTIM1;//--56M 选择时钟
    8.   LPTim1.Init.Clock.Source = LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC;  //--时钟选择--
    9.   LPTim1.Init.Clock.Prescaler = LPTIM_PRESCALER_DIV1;           //--
    10.   LPTim1.Init.Trigger.Source = LPTIM_TRIGSOURCE_SOFTWARE;       //--
    11.   LPTim1.Init.Trigger.ActiveEdge = LPTIM_ACTIVEEDGE_RISING;     //--
    12.   LPTim1.Init.Trigger.SampleTime = LPTIM_TRIGSAMPLETIME_DIRECTTRANSITION;
    13.   LPTim1.Init.Period = 32767;
    14.   LPTim1.Init.UpdateMode = LPTIM_UPDATE_IMMEDIATE;
    15.   LPTim1.Init.CounterSource = LPTIM_COUNTERSOURCE_INTERNAL;
    16.   LPTim1.Init.Input1Source = LPTIM_INPUT1SOURCE_GPIO;
    17.   LPTim1.Init.RepetitionCounter = 999;
    18. //        HAL_LPTIM_TimeOut_Start_IT(&LPTim1, 32768);
    19. //        HAL_TIM_MspPostInit(&LPTim1);
    20.   if (HAL_LPTIM_Init(&LPTim1) != HAL_OK)
    21.   {
    22.                 Enablecount=1;
    23.   }
    24.         else{ Enablecount=2;}
    25.         HAL_LPTIM_TimeOut_Start_IT(&LPTim1, 32767);
    26. }
    27. unsigned int LP_TimCount=0;


    28. void TIM6_DAC_LPTIM1_IRQHandler(void)
    29. {
    30.   if (__HAL_LPTIM_GET_FLAG(&LPTim1, LPTIM_FLAG_UPDATE) != RESET)
    31.   {
    32.                 __HAL_LPTIM_CLEAR_FLAG(&LPTim1, LPTIM_FLAG_UPDATE);
    33.                 LP_TimCount++;
    34.                 if(LP_TimCount==500 )
    35.                 {
    36.                                 LP_TimCount=0;
    37.                                 HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
    38.                                 LP_UART_Test();
    39.                 }
    40.         }
    41. }

    复制代码
    大家感兴趣的话可以自己做一下尝试。


    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 02:10 , Processed in 0.122034 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.