色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于MM32L0130的LPUART應(yīng)用(1)

冬至子 ? 來源:靈動(dòng)MM32MCU ? 作者:靈動(dòng)MM32 ? 2023-06-02 17:27 ? 次閱讀

LPUART(Low power universal asynchronous receiver transmitter,低功耗通用異步收發(fā)器),相比標(biāo)準(zhǔn)的UART,其功耗極低,支持在低功耗模式下運(yùn)行,并且可以將MCU從低功耗模式喚醒。

本文介紹MM32全新低功耗系列MM32L0130的LPUART外設(shè),實(shí)現(xiàn)基本UART收發(fā)通信、通過UART中斷使MCU從低功耗模式中喚醒。

1 LPUART 簡介

1.1 LPUART功能框圖

image.png

1.2 LPUART功能特征

支持UART幀格式的全雙工異步數(shù)據(jù)收發(fā)。

支持輸入任意頻率的時(shí)鐘源,可配置為LSE/LSI/PCLK。

支持可編程的波特率數(shù)據(jù)傳輸,發(fā)送和接收時(shí)可采用3、4分頻交替,防止累計(jì)誤差。

可配置奇偶校驗(yàn)位、停止位。

可配置收發(fā)數(shù)據(jù)信號取反。

2 LPUART時(shí)鐘配置

image.png

LPUART時(shí)鐘源配置寄存器在RCC_CFGR2中的位0和位1,可配置LSE、LSI、PCLK作為時(shí)鐘源。

3 LPUART中斷與喚醒

支持的中斷源:

接收緩沖溢出

幀錯(cuò)誤

奇偶校驗(yàn)錯(cuò)誤

接收器檢測到起始位

接收器檢測到下降沿

接收器完整接收 1byte 數(shù)據(jù)

接收器完整接收數(shù)據(jù)且與預(yù)設(shè)數(shù)據(jù)匹配

發(fā)送器數(shù)據(jù)完成發(fā)送

發(fā)送器緩沖空

支持低功耗模式下的喚醒源:

接收器檢測到下降沿喚醒

接收器檢測到起始位喚醒

接收器1字節(jié)接收完成喚醒

接收器1字節(jié)數(shù)據(jù)接收并匹配喚醒

4 接收和發(fā)送時(shí)序

由于LPUART工作時(shí)鐘不是波特率的整數(shù)倍,采用固定分頻系數(shù)的話會(huì)引入累計(jì)誤差,所以在接收和發(fā)送的時(shí)候采用3、4分頻交替進(jìn)行接收和發(fā)送,每個(gè)bit采樣一次,每個(gè)bit采用3分頻還是4分頻由MCTL寄存器控制,接收和發(fā)送時(shí)序圖如下:

image.png

當(dāng)LPUART工作時(shí)鐘配置為標(biāo)準(zhǔn)的32.768KHz時(shí),軟件可配置BREN為0,然后根據(jù)通信波特率調(diào)整調(diào)制寄存器MCTL,建議配置參數(shù)如下表:

image.png

5 LPUART寄存器概覽

image.png

6 LPUART實(shí)現(xiàn)普通UART功能配置步驟

  1. 開啟LPUART所選時(shí)鐘源
  2. 配置RCC_CFGR2寄存器選擇LPUART時(shí)鐘
  3. 配置 LPUBAUD 寄存器決定波特率
  4. 根據(jù)波特率選擇合適的調(diào)制參數(shù),配置 MCTL 寄存器
  5. 配置 LPUCON 寄存器,選擇幀格式、極性、中斷參數(shù)等
  6. 配置 LPUEN 寄存器打開發(fā)送、接收使能

7 發(fā)送和接收數(shù)據(jù)

發(fā)送數(shù)據(jù):

將待發(fā)送的數(shù)據(jù)寫入LPUTXD,當(dāng)發(fā)送完成時(shí),LPUSTA的TXE標(biāo)志位會(huì)被硬件置起,表示數(shù)據(jù)已傳入移位寄存器,發(fā)送 buffer為空。此時(shí)可往LPUTXD寫入下一個(gè)數(shù)據(jù)。軟件向發(fā)送buffer寫數(shù)據(jù)時(shí)TXE標(biāo)志位自動(dòng)清零。

接收數(shù)據(jù):

當(dāng)接收一個(gè)完整幀時(shí),LPUSTA的RXF標(biāo)志位置起,表示已完整接收數(shù)據(jù),此時(shí)軟件可讀取LPURXD讀出接收到的數(shù)據(jù)。軟件讀LPUDATA寄存器時(shí),RXF標(biāo)志位自動(dòng)清零。

8 LPUART功能實(shí)現(xiàn)代碼

首先編寫基礎(chǔ)UART的代碼,通過輪詢的方式發(fā)送和接收數(shù)據(jù)。然后添加中斷代碼,實(shí)現(xiàn)通過LPUART將MCU從低功耗模式喚醒。

8.1 基于LSE時(shí)鐘的基礎(chǔ)UART功能實(shí)現(xiàn)代碼

a.

開啟BKP、LSE時(shí)鐘,待LSE時(shí)鐘穩(wěn)定,使能LPUART時(shí)鐘:

RCC_APB1PeriphClockCmd(RCC_APB1ENR_BKP, ENABLE);
PWR_BackupAccessCmd(ENABLE);
RCC_LSEConfig(RCC_LSE_ON);
DELAY_Ms(100);
while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET) {;}
RCC_APB2PeriphClockCmd(RCC_APB2ENR_LPUART1, ENABLE);

b.

配置LPUART的LPUART_InitTypeDef結(jié)構(gòu)體參數(shù):

LPUART_InitTypeDef init_struct;
init_struct.LPUART_Clock_Source = 0; //時(shí)鐘源選擇
init_struct.LPUART_BaudRate = LPUART_Baudrate_9600; //波特率選擇9600
init_struct.LPUART_WordLength = LPUART_WordLength_8b; //8位數(shù)據(jù)位
init_struct.LPUART_StopBits = LPUART_StopBits_1; //1位停止位
init_struct.LPUART_Parity = LPUART_Parity_No; //沒有校驗(yàn)位
init_struct.LPUART_MDU_Value = 0x952; //波特率調(diào)制控制寄存器
init_struct.LPUART_NEDET_Source = LPUART_NegativeDectect_Source2;//下降沿采樣使能
init_struct.LPUART_RecvEventCfg = LPUART_RecvEvent_Start_Bit;//中斷檢測模式
LPUART_Init(LPUART1, &init_struct);
LPUART_Cmd(LPUART1, ENABLE);

c.

設(shè)置LPUART引腳復(fù)用,例程復(fù)用到PA4、PA5:

GPIO_InitTypeDef GPIO_InitStruct;
RCC_GPIO_ClockCmd(GPIOA, ENABLE);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource4, GPIO_AF_3);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_3);

//LPUART1_TX   GPIOA.4
GPIO_StructInit(&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStruct);

//LPUART1_RX    GPIOA.5
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStruct);

d.

編寫發(fā)送函數(shù):

void Output_Byte(LPUART_TypeDef* lpuart, uint8_t dat)
{
    LPUART_SendData(lpuart, dat);
    while(!LPUART_GetFlagStatus(lpuart, LPUART_LPUSTA_TXE));
}

e.

編寫輪詢接收函數(shù):

uint8_t Input_Byte(LPUART_TypeDef* lpuart)
{
    uint8_t temp;
    while(1) {
        if(LPUART_GetFlagStatus(lpuart, LPUART_LPUSTA_RXF)) {
            //read LPUART_LPUSTA_RXF bit and clear
            temp = (uint8_t)LPUART_ReceiveData(lpuart);
            break;
        }
    }
    if(temp == 0xd) {
        return 0;
    }
    return temp;
}

f.

編寫實(shí)驗(yàn)樣例:

void LPUART_TxRx_Test(void)
{
    uint8_t temp, i;
    char string[] = "LPUART polling test!\\r\\n";

    for(i = 0; i < strlen(string); i++)
    {
        Output_Byte(LPUART1, string[i]);
    }
    while(1)
    {
        temp = Input_Byte(LPUART1);
        if(temp != 0)
        {
            Output_Byte(LPUART1, temp);
        }
    }
}

g.

在main函數(shù)中配置好LPUART后,調(diào)用LPUART_TxRx_Test函數(shù),可得到如下實(shí)驗(yàn)結(jié)果:

image.png

8.2 在上述基本LPUART配置的基礎(chǔ)上增加中斷配置代碼,實(shí)現(xiàn)喚醒低功耗模式中的MCU

a.

開啟SYSCFG、PWR時(shí)鐘:

RCC_APB2PeriphClockCmd(RCC_APB2ENR_SYSCFG, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1ENR_PWR, ENABLE);

b.

EXTI模塊可以產(chǎn)生中斷請求,用來喚醒低功耗模式中的MCU,LPUART連接到EXTI22,使能EXTI22:

EXTI_InitTypeDef EXTI_InitStruct;
EXTI_StructInit(&EXTI_InitStruct);
EXTI_InitStruct.EXTI_Line = EXTI_Line22;
EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStruct.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStruct);

c.

配置NVIC:

NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel = LPUART1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPriority = 1;
NVIC_Init( &NVIC_InitStruct);

d.

清除接收標(biāo)志并打開接收中斷:

LPUART_ClearITPendingBit(LPUART1, LPUART_LPUIF_RXIF);
LPUART_ITConfig(LPUART1, LPUART_LPUCON_RXIE, ENABLE);

e.

定義RX緩存,然后編寫中斷服務(wù)函數(shù):

char rxDataBuf[10], cnt = 0;
uint8_t cnt_flag = 0;
void LPUART1_IRQHandler()
{
    if(LPUART_GetFlagStatus(LPUART1, LPUART_LPUSTA_START))
    {
        LPUART_ClearFlagStatus(LPUART1, LPUART_LPUSTA_START);

    }
    if(LPUART_GetITStatus(LPUART1, LPUART_LPUIF_RXIF) == SET)
    {
        LPUART_ClearITPendingBit(LPUART1, LPUART_LPUIF_RXIF);
        rxDataBuf[cnt] = LPUART_ReceiveData(LPUART1);
        if(++cnt >= 10)
        {
            cnt_flag = 1;
            cnt = 0;
        }
    }
}

f.

編寫實(shí)驗(yàn)樣例:

void LPUART_Wakeup_Test(void)
{
    uint8_t temp, i;
    char string1[] = "LPUART wakeup mcu test!\\r\\n";
    char string2[] = "mcu stop!\\r\\n";
    char string3[] = "mcu wakeup!\\r\\n";

    for(i = 0; i < strlen(string1); i++)
    {
        Output_Byte(LPUART1, string1[i]);
    }
    DELAY_Ms(20);
    for(i = 0; i < strlen(string2); i++)
    {
        Output_Byte(LPUART1, string2[i]);
    }
    PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//休眠
    for(i = 0; i < strlen(string3); i++)
    {
        Output_Byte(LPUART1, string3[i]);
    }

    while(1)
    {

    }
}

g.

在main函數(shù)中配置好LPUART后,調(diào)用實(shí)驗(yàn)函數(shù)LPUART_Wakeup_Test,可以的到如下結(jié)果:

image.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5357

    瀏覽量

    120641
  • 接收器
    +關(guān)注

    關(guān)注

    14

    文章

    2473

    瀏覽量

    71988
  • RCC
    RCC
    +關(guān)注

    關(guān)注

    0

    文章

    93

    瀏覽量

    26962
  • UART接口
    +關(guān)注

    關(guān)注

    0

    文章

    124

    瀏覽量

    15315
  • MCU芯片
    +關(guān)注

    關(guān)注

    3

    文章

    253

    瀏覽量

    11549
收藏 人收藏

    評論

    相關(guān)推薦

    基于MM32L0130LPUART應(yīng)用(1

    LPUART(Low power universal asynchronous receiver transmitter,低功耗通用異步收發(fā)器),相比標(biāo)準(zhǔn)的UART,其功耗極低,支持在低功耗模式下運(yùn)行,并且可以將MCU從低功耗模式喚醒。
    的頭像 發(fā)表于 11-18 10:35 ?3121次閱讀
    基于<b class='flag-5'>MM32L0130</b>的<b class='flag-5'>LPUART</b>應(yīng)用(<b class='flag-5'>1</b>)

    使用MM32L0130 IRM實(shí)現(xiàn)紅外發(fā)碼

    1、使用MM32L0130 IRM實(shí)現(xiàn)紅外發(fā)碼  紅外遙控是一種無線、非接觸控制技術(shù),具有抗干擾能力強(qiáng),信息傳輸可靠,功耗低,成本低,易于實(shí)現(xiàn)等顯著優(yōu)點(diǎn),被諸多電子設(shè)備包括消費(fèi)電子、家用電器、安防
    發(fā)表于 10-21 14:22

    基于MM32L0130的低功耗電子時(shí)鐘設(shè)計(jì)方案相關(guān)資料分享

    1、基于MM32L0130的低功耗電子時(shí)鐘設(shè)計(jì)  MM32L0130作為靈動(dòng)微電子推出的一款低功耗芯片,內(nèi)置多種省電工作模式保證低功耗應(yīng)用的要求。前面章節(jié)分別對MM32L0130片上外
    發(fā)表于 11-09 16:00

    基于MM32L0130LPUART外設(shè)應(yīng)用簡介

    運(yùn)行,并且可以將MCU從低功耗模式喚醒。本文介紹MM32全新低功耗系列MM32L0130LPUART外設(shè),實(shí)現(xiàn)基本UART收發(fā)通信、通過UART中斷使MCU從低功耗模式中喚醒。1
    發(fā)表于 12-09 16:04

    請問有人使用IAR進(jìn)行過MM32L0130的開發(fā)嗎?

    我在使用IAR8.30進(jìn)行MM32L0130開發(fā)板試用時(shí)遇到了一個(gè)棘手的問題,其例程能夠下載到開發(fā)板(至少在IAR中任何報(bào)錯(cuò),也可以在線調(diào)試),可是就是一直開在時(shí)鐘配置階段,一直沒有配置成功,有人遇到過這樣的問題嗎?或者在調(diào)試其他單片機(jī)時(shí)是否有類似現(xiàn)象?麻煩指導(dǎo)一下解決辦法
    發(fā)表于 12-18 21:48

    使用MM32L0130片上IRM模塊實(shí)現(xiàn)紅外發(fā)碼

    靈動(dòng)股份推出的MM32L0130系列MCU具有片上IRM紅外調(diào)制器,該模塊使用片上的定時(shí)器和串口,實(shí)現(xiàn)數(shù)據(jù)的 FSK/ASK 調(diào)制,以滿足紅外發(fā)碼的需求。
    的頭像 發(fā)表于 10-13 17:03 ?1273次閱讀

    MM32L0130 RTC日歷和鬧鐘

    RTC 模塊是用于提供時(shí)間(時(shí)、分、秒、亞秒)和日期(年、月、日)功能的定時(shí)計(jì)數(shù)器,日歷以 BCD碼的格式顯示。內(nèi)部包含周期性的喚醒單元,用于喚醒低功耗模式。支持夏令時(shí)補(bǔ)償,支持?jǐn)?shù)字校準(zhǔn)補(bǔ)償晶振精度的偏差。靈動(dòng)微電子推出的MM32L0130系列MCU片上RTC外設(shè)具有以下特征。
    的頭像 發(fā)表于 10-28 10:37 ?1327次閱讀

    基于MM32L0130的低功耗電子時(shí)鐘設(shè)計(jì)

    MM32L0130作為靈動(dòng)微電子推出的一款低功耗芯片,內(nèi)置多種省電工作模式保證低功耗應(yīng)用的要求。前面章節(jié)分別對MM32L0130片上外設(shè)SLCD和RTC做了相關(guān)描述,并列舉對應(yīng)程序?qū)崿F(xiàn)SLCD驅(qū)動(dòng)
    的頭像 發(fā)表于 11-04 10:12 ?1657次閱讀

    基于MM32L0130LPUART應(yīng)用(2)

    LPUART(Low power universal asynchronous receiver transmitter,低功耗通用異步收發(fā)器),相比標(biāo)準(zhǔn)的UART,其功耗極低,支持在低功耗模式下運(yùn)行,并且可以將MCU從低功耗模式喚醒。
    的頭像 發(fā)表于 11-24 17:52 ?941次閱讀

    MM32L0130 產(chǎn)品手冊(中文版)

    MM32L0130 產(chǎn)品手冊(中文版)
    發(fā)表于 02-27 18:24 ?0次下載
    <b class='flag-5'>MM32L0130</b> 產(chǎn)品手冊(中文版)

    MM32L0130 產(chǎn)品手冊(英文版)

    MM32L0130 產(chǎn)品手冊(英文版)
    發(fā)表于 02-27 18:25 ?0次下載
    <b class='flag-5'>MM32L0130</b> 產(chǎn)品手冊(英文版)

    MM32L0130 用戶手冊(中文版)

    MM32L0130 用戶手冊(中文版)
    發(fā)表于 02-27 18:26 ?0次下載
    <b class='flag-5'>MM32L0130</b> 用戶手冊(中文版)

    MM32L0130 用戶手冊(英文版)

    MM32L0130 用戶手冊(英文版)
    發(fā)表于 02-27 18:26 ?0次下載
    <b class='flag-5'>MM32L0130</b> 用戶手冊(英文版)

    基于MM32L0130LPUART應(yīng)用(2)

    LPUART(Low power universal asynchronous receiver transmitter,低功耗通用異步收發(fā)器),相比標(biāo)準(zhǔn)的UART,其功耗極低,支持在低功耗模式下運(yùn)行,并且可以將MCU從低功耗模式喚醒。
    的頭像 發(fā)表于 06-02 17:30 ?1085次閱讀
    基于<b class='flag-5'>MM32L0130</b>的<b class='flag-5'>LPUART</b>應(yīng)用(2)

    使用MM32L0130和HYS1254的電子秤方案驗(yàn)證

    NPI提了需求,需要驗(yàn)證使用友商SDADC芯片和MM32L0130微控制器集成的一個(gè)系統(tǒng)應(yīng)用方案。
    的頭像 發(fā)表于 10-17 17:16 ?801次閱讀
    使用<b class='flag-5'>MM32L0130</b>和HYS1254的電子秤方案驗(yàn)證
    主站蜘蛛池模板: 成人网站国产在线视频内射视频 | 亚洲视频中文| 在线看无码的免费网站| RAPPER性骚扰大开黄腔| 国产老肥熟xxxx| 老熟风间由美AV在线一区二区| 欧美日韩精品| 先锋资源久久| 97国内精品久久久久久久影视| 国产99网站| 久久在精品线影院| 色婷婷激婷婷深爱五月小蛇| 一个人免费观看完整视频日本 | 一个人HD在线观看免费高清视频| www.中文字幕在线观看| 好爽胸大好深好多水| 欧美日韩亚洲一区视频二区| 亚洲精品国产高清嫩草影院| Chineseman瘦老头77| 韩国和日本免费不卡在线| 琪琪电影午夜理论片77网| 亚洲精品青青草原avav久久qv| porono日本xxx| 精品国产在线亚洲欧美| 日韩人妻无码精品-专区 | 西西人体大胆牲交PP6777| 97国产视频| 激情女人花| 少男同志freedeos| 91国内精品久久久久免费影院| 国产色精品久久人妻无码| 欧美精品高潮呻吟AV久久| 亚洲三级在线中文字幕| 成人免费小视频| 蕾丝边娱乐网| 亚洲精品无码国产爽快A片百度| 成人在线精品视频| 麻豆AV蜜桃AV久久| 亚洲精品拍拍央视网出文| 动漫美女的阴| 欧美16一17sex性hd|