在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于MM32L0130的LPUART應用(1)

靈動MM32MCU ? 來源:靈動MM32MCU ? 作者:靈動MM32MCU ? 2022-11-18 10:35 ? 次閱讀

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

本文介紹MM32全新低功耗系列MM32L0130的LPUART外設,實現基本UART收發通信、通過UART中斷使MCU從低功耗模式中喚醒。

1LPUART 簡介

1.1 LPUART功能框圖

c8b7b75e-665f-11ed-8abf-dac502259ad0.jpg ? ?

1.2 LPUART功能特征

支持UART幀格式的全雙工異步數據收發。

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

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

可配置奇偶校驗位、停止位。

可配置收發數據信號取反。

2LPUART時鐘配置

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

c8d54abc-665f-11ed-8abf-dac502259ad0.png

3LPUART中斷與喚醒

支持的中斷源:

接收緩沖溢出

幀錯誤

奇偶校驗錯誤

接收器檢測到起始位

接收器檢測到下降沿

接收器完整接收 1byte 數據

接收器完整接收數據且與預設數據匹配

發送器數據完成發送

發送器緩沖空

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

接收器檢測到下降沿喚醒

接收器檢測到起始位喚醒

接收器1字節接收完成喚醒

接收器1字節數據接收并匹配喚醒

4接收和發送時序

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

c8eb5032-665f-11ed-8abf-dac502259ad0.png

當LPUART工作時鐘配置為標準的32.768KHz時,軟件可配置BREN為0,然后根據通信波特率調整調制寄存器MCTL,建議配置參數如下表:

c900eaaa-665f-11ed-8abf-dac502259ad0.png

5LPUART寄存器概覽

c91b0278-665f-11ed-8abf-dac502259ad0.png

6LPUART實現普通UART功能配置步驟

1開啟LPUART所選時鐘源

2配置RCC_CFGR2寄存器選擇LPUART時鐘

3配置 LPUBAUD 寄存器決定波特率

4根據波特率選擇合適的調制參數,配置 MCTL 寄存器

5配置 LPUCON 寄存器,選擇幀格式、極性、中斷參數等

6配置 LPUEN 寄存器打開發送、接收使能

7發送和接收數據

發送數據:

將待發送的數據寫入LPUTXD,當發送完成時,LPUSTA的TXE標志位會被硬件置起,表示數據已傳入移位寄存器,發送 buffer為空。此時可往LPUTXD寫入下一個數據。軟件向發送buffer寫數據時TXE標志位自動清零。

接收數據:

當接收一個完整幀時,LPUSTA的RXF標志位置起,表示已完整接收數據,此時軟件可讀取LPURXD讀出接收到的數據。軟件讀LPUDATA寄存器時,RXF標志位自動清零。

8LPUART功能實現代碼

首先編寫基礎UART的代碼,通過輪詢的方式發送和接收數據。然后添加中斷代碼,實現通過LPUART將MCU從低功耗模式喚醒。

8.1 基于LSE時鐘的基礎UART功能實現代碼

a.開啟BKP、LSE時鐘,待LSE時鐘穩定,使能LPUART時鐘:

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結構體參數:

LPUART_InitTypeDefinit_struct;
init_struct.LPUART_Clock_Source=0;//時鐘源選擇
init_struct.LPUART_BaudRate=LPUART_Baudrate_9600;//波特率選擇9600
init_struct.LPUART_WordLength=LPUART_WordLength_8b;//8位數據位
init_struct.LPUART_StopBits=LPUART_StopBits_1;//1位停止位
init_struct.LPUART_Parity=LPUART_Parity_No;//沒有校驗位
init_struct.LPUART_MDU_Value=0x952;//波特率調制控制寄存器
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.設置LPUART引腳復用,例程復用到PA4、PA5:

GPIO_InitTypeDefGPIO_InitStruct;
RCC_GPIO_ClockCmd(GPIOA,ENABLE);

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

//LPUART1_TXGPIOA.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_RXGPIOA.5
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
GPIO_Init(GPIOA,&GPIO_InitStruct);

d.編寫發送函數:

voidOutput_Byte(LPUART_TypeDef*lpuart,uint8_tdat)
{
LPUART_SendData(lpuart,dat);
while(!LPUART_GetFlagStatus(lpuart,LPUART_LPUSTA_TXE));
}

e.編寫輪詢接收函數:

uint8_tInput_Byte(LPUART_TypeDef*lpuart)
{
uint8_ttemp;
while(1){
if(LPUART_GetFlagStatus(lpuart,LPUART_LPUSTA_RXF)){
//readLPUART_LPUSTA_RXFbitandclear
temp=(uint8_t)LPUART_ReceiveData(lpuart);
break;
}
}
if(temp==0xd){
return0;
}
returntemp;
}

f.編寫實驗樣例:

voidLPUART_TxRx_Test(void)
{
uint8_ttemp,i;
charstring[]="LPUARTpollingtest!
";

for(i=0;i

g.在main函數中配置好LPUART后,調用LPUART_TxRx_Test函數,可得到如下實驗結果:

cad0236e-665f-11ed-8abf-dac502259ad0.png

8.2 在上述基本LPUART配置的基礎上增加中斷配置代碼,實現喚醒低功耗模式中的MCU

a.開啟SYSCFG、PWR時鐘:

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

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

EXTI_InitTypeDefEXTI_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_InitTypeDefNVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel=LPUART1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStruct.NVIC_IRQChannelPriority=1;
NVIC_Init(&NVIC_InitStruct);

d.清除接收標志并打開接收中斷:

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

e.定義RX緩存,然后編寫中斷服務函數:

charrxDataBuf[10],cnt=0;
uint8_tcnt_flag=0;
voidLPUART1_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.編寫實驗樣例:

voidLPUART_Wakeup_Test(void)
{
uint8_ttemp,i;
charstring1[]="LPUARTwakeupmcutest!
";
charstring2[]="mcustop!
";
charstring3[]="mcuwakeup!
";

for(i=0;i

g.在main函數中配置好LPUART后,調用實驗函數LPUART_Wakeup_Test,可以的到如下結果:

cae8d170-665f-11ed-8abf-dac502259ad0.png

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17215

    瀏覽量

    351942
  • 寄存器
    +關注

    關注

    31

    文章

    5359

    瀏覽量

    120806
  • uart
    +關注

    關注

    22

    文章

    1242

    瀏覽量

    101540
  • 異步收發器
    +關注

    關注

    0

    文章

    36

    瀏覽量

    10865
  • MM32
    +關注

    關注

    1

    文章

    106

    瀏覽量

    791

原文標題:靈動微課堂 (第236講)|基于MM32L0130的LPUART應用(1)

文章出處:【微信號:MindMotion-MMCU,微信公眾號:靈動MM32MCU】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    昂科燒錄器支持MindMotion靈動微電子的32位微控制器MM32L052NT

    MM32L052NT使用高性能的ARM? Cortex?-M0為內核的32位微控制器,最高工作頻率可達48MHz,內置高速存儲器,豐富的增強型I/O端口和外設連接到外部總線。MM32L052NT包含1
    的頭像 發表于 07-04 14:49 ?500次閱讀
    昂科燒錄器支持MindMotion靈動微電子的32位微控制器<b class='flag-5'>MM32L</b>052NT

    STM32L431復位后第一次接收數據,第一個字節丟失的原因?

    LPUART1_IRQHandler(void){/ USER CODE BEGIN LPUART1_IRQn 0 / / USER CODE BEGIN USART1_IRQn 0 / / USER CODE END
    發表于 05-29 06:14

    AR0130CSSC00SPCAH-GEVB數據手冊

    電子發燒友網站提供《AR0130CSSC00SPCAH-GEVB數據手冊.rar》資料免費下載
    發表于 05-06 16:56 ?0次下載
    AR<b class='flag-5'>0130</b>CSSC00SPCAH-GEVB數據手冊

    用stm32cubemx開發stm32L052,對LPUART設置的時候,為什么沒有能夠設置通信中斷的地方?

    各位大神請教下,小弟用stm32cubemx開發L052,庫使用的是L0 v1.11.2 發現在對LPUART設置的時候,沒有能夠設置通信中斷的地方(USART可以設置),我以前的老工程用cube打開是可以設置的,請教下是升級后
    發表于 04-19 06:10

    STM32G031J6的LPUART發送導致系統復位怎么解決?

    單片機型號是G031J6MX,其中LPUART是單發送模式。發現LP串口一發送數據,系統就重啟,因為LPUART的這個引腳和NRST是同一個引腳,還是懷疑自己配置的問題,請朋友們來幫忙看看有個可能是什么原因
    發表于 04-15 06:41

    STM32L051串口接收卡死的原因?

    LPUART1_IRQHandler(void) { //uint8_tRCVBUF; /* USER CODE BEGIN LPUART1_IRQn 0 */ /* USER CODE END LPUART1
    發表于 04-12 07:11

    stm32L072芯片LPUART1接收發送失敗的原因?怎么解決?

    使用stm32擴展庫開發L072系列時發現,初始化LPUART1后,所得到得波特率與電腦實際接受不符,且只有波特率在9600以上,串口才不會進入溢出中斷。但接受數據仍然不對,初始化如下: void
    發表于 04-09 07:46

    STM32L431CCT6頻繁出現LSE CSS錯誤是什么原因導致的?

    STM32L431CCT6芯片,外部使用32.768k的晶振,匹配電容22pf。LSE作為RTC,LPUART1的時鐘源,啟用LSE CSS功能。經常會發生LSE CSS錯誤,在發生錯誤的時候沒有
    發表于 03-28 09:01

    關于STM32L051C8T6芯片LPUART+DMA接收問題求解

    STM32L051C8T6芯片低功耗串口LPUART+DMA。 我用STM32CUBEMX 生成了程序LPUART以及UART2串口+DMA的程序。 重新寫了RxCpltCall函數里面有回顯功能
    發表于 03-28 07:05

    STM32L412KB DMA1與DMA2數據在傳輸時會存在串口數據不正確的情況,為什么?

    (void){ //設置外設地址 LL_DMA_SetPeriphAddress(DMA2,LL_DMA_CHANNEL_6,LL_LPUART_DMA_GetRegAddr(LPUART1
    發表于 03-28 06:34

    使用STM32L051結合8421編碼器進行開發時,LPUART1癱瘓無法正常使用的原因?

    我在使用STM32L051型號芯片結合一個旋轉式的8421編碼器進行開發時,發現我對GPIO操作會引起LPUART1的結構體中很多參數的變化,最終導致LPUART1癱瘓而無法正常使用,其關鍵代碼如下
    發表于 03-25 08:03

    STM32L053R8T6用CUBE生成的程序,LPUART1的RX腳沒有內部上拉,對低功耗有沒有影響?

    請教一個問題,ST我用CUBE生成的程序,LPUART1的RX腳沒有內部上拉,這個對低功耗有沒有影響?
    發表于 03-25 07:12

    請問STM32G473VET6的LPUART1能和USART1能同時使用嗎?

    STM32G473VET6的LPUART1能和USART1能同時使用嗎?
    發表于 03-22 07:00

    2-mm×2-mm SON封裝中的1-A降壓轉換器TPS6229x-Q1數據表

    電子發燒友網站提供《2-mm×2-mm SON封裝中的1-A降壓轉換器TPS6229x-Q1數據表.pdf》資料免費下載
    發表于 03-11 10:17 ?0次下載
    2-<b class='flag-5'>mm</b>×2-<b class='flag-5'>mm</b> SON封裝中的<b class='flag-5'>1</b>-A降壓轉換器TPS6229x-Q<b class='flag-5'>1</b>數據表

    全志R128 SDK HAL 模塊開發指南之 LPUART

    ├── Makefile ├── platform │├── lpuart-sun20iw2p1.h ---- 平臺地址,引腳復用等配置 │└── ... ├── platform-lpuart
    發表于 02-02 10:04
    主站蜘蛛池模板: 天天拍拍天天爽免费视频| 国产精品香蕉在线一区| 天天干2018| 国产三片理论电影在线| 黄色一级毛片在线观看| 国产精品乳摇在线播放| 99久在线| 国产性videosgratis| 国产精品资源网| 尻老逼| 日韩卡1卡2卡三卡四卡二卡免| 日韩视频高清| 女人特黄大aaaaaa大片| 色aaa| 欧美在线观看www| 四虎影午夜成年免费精品| 色综合五月婷婷| 性欧美高清强烈性视频| 男人午夜视频| 91国在线啪精品一区| 色黄网| 日美一级毛片| 亚洲午夜久久久精品影院视色| 色综合久久综合欧美综合图片| 免费日韩一级片| 欧美日韩一日韩一线不卡| 久久综合久久精品| 91精品久久国产青草| 欧美成人免费大片888| 深夜影院一级毛片| 天天夜夜爽| 午夜精品视频在线观看美女| www.九色.com| 爱草免费视频| sihu国产午夜精品一区二区三区| 在线看免费| 午夜在线观看网站| 国产特黄一级一片免费| 国产大毛片| aa2424在线视频看片| 亚洲成a人片77777kkk|