電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>嵌入式開發(fā)>MM32F013x——UART 9bit 通信

MM32F013x——UART 9bit 通信

2021-01-26 | pdf | 168.96KB | 次下載 | 2積分

資料介紹

在之前的微課堂中和大家分享過靈動(dòng)MM32系列MCUUART通信實(shí)例,在此實(shí)例的基礎(chǔ)上我們?cè)黾覷ART 9bit通信功能。UART 9bit通信的作用是第9bit用于標(biāo)識(shí)是地址或數(shù)據(jù),第9bit 為1標(biāo)識(shí)是從機(jī)地址,為0標(biāo)識(shí)是數(shù)據(jù),此外UART通信的第9bit也可作為數(shù)據(jù)的同步幀位使用。

在雙機(jī)通訊中,UART的8bit通信的第九位一般是奇偶校驗(yàn)位,而多機(jī)通訊中,第九位用于標(biāo)識(shí)地址或數(shù)據(jù),常用1表示后面的是從機(jī)地址,0表示后面的是數(shù)據(jù)。我們通常希望只有被尋址的接收者才被激活,來接收隨后的數(shù)據(jù),這樣就可以減少由未被尋址的接收器的參與帶來的多余的UART服務(wù)開銷。未被尋址的設(shè)備可啟用其靜默功能置于靜默模式。在靜默模式里,任何接收狀態(tài)位都不會(huì)被設(shè)置,所有接收中斷被禁止。

以MM32F013x系列MCU的UART通信為例,通過一個(gè)示例Demo介紹UART 9bit通信的同步幀方式。

一、與UART 9bit通信相關(guān)的寄存器

圖1

如上圖1所示為UART通用控制寄存器UART_CCR,在MM32F013x UM手冊(cè)的第489和第490頁有關(guān)于該寄存器位的詳細(xì)描述。本實(shí)例用到的UART通用控制寄存器UART_CCR位說明如下:

Bit11

B8EN(rw, reset:0x00)UART同步幀發(fā)送第9bit使能控制位。該位使能后校驗(yàn)使能PEN不起作用。

1:使能同步幀第9bit發(fā)送。

庫函數(shù)設(shè)置:

UART_Enable9bit(UART1, ENABLE)

0:禁止同步幀第9bit發(fā)送。

庫函數(shù)設(shè)置:

UART_Enable9bit(UART1, DISABLE)

Bit10

B8TOG(rw,reset:0x00)UART同步幀發(fā)送第9bit自動(dòng)翻轉(zhuǎn)控制位。

1:使能第9bit自動(dòng)翻轉(zhuǎn)。

庫函數(shù)設(shè)置:

UART_Set9bitAutomaticToggle(UART1, ENABLE)

0:禁止第9bit自動(dòng)翻轉(zhuǎn)。

庫函數(shù)設(shè)置:

UART_Set9bitAutomaticToggle(UART1, DISABLE)

注:在 B8TXD 和 B8POL 的值相同時(shí),在配置完寄存器后傳輸?shù)牡诙€(gè)數(shù)據(jù)開始翻轉(zhuǎn),第一個(gè)數(shù)據(jù)默認(rèn)為地址位。

Bit8

B8TXD(rw,reset:0x00)UART同步幀發(fā)送數(shù)據(jù)第9bit。

1:發(fā)送同步幀第9bit為高電平。

庫函數(shù)設(shè)置:

UART_Set9bitLevel(UART1, ENABLE)

0:發(fā)送同步幀第9bit為低電平。

庫函數(shù)設(shè)置:

UART_Set9bitLevel(UART1, DISABLE)

二、程序配置

初始化MM32F013x UART1 9bit通信

從官網(wǎng)下載MM32F013x例程,以MM32F0133C7P的UART1通信為例,增加與UART 9bit通信相關(guān)的寄存器位的初始化,這里以庫函數(shù)方式給出,增加的3行代碼如下所示:

//Synchronous frame enable bit UART_CCR Bit11:B8EN
UART_Enable9bit(UART1, ENABLE);
//Synchronous frame transmit UART_CCR Bit8: B8TXD
UART_Set9bitLevel(UART1, DISABLE);
//Synchronous frame auto toggle UART_CCR Bit10:B8TOG
UART_Set9bitAutomaticToggle(UART1, ENABLE);

MM32F0133C7P UART1 9bit通信,初始化代碼如下所示:

void bsp_UART1_9Bit_Init(u32 baudrate)
{
GPIO_InitTypeDef GPIO_InitStructure;
UART_InitTypeDef UART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBENR_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_UART1, ENABLE);

GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_1);

GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
UART_StructInit(&UART_InitStructure);

UART_InitStructure.BaudRate = baudrate;
UART_InitStructure.WordLength = UART_WordLength_8b;
UART_InitStructure.StopBits = UART_StopBits_1;

UART_InitStructure.Parity = UART_Parity_No;
UART_InitStructure.HWFlowControl = UART_HWFlowControl_None;
UART_InitStructure.Mode = UART_Mode_Rx | UART_Mode_Tx;
UART_Init(UART1, &UART_InitStructure);

UART_ITConfig(UART1, UART_IT_RXIEN, ENABLE);
UART_Enable9bit(UART1, ENABLE);
UART_Set9bitLevel(UART1, DISABLE);
UART_Set9bitAutomaticToggle(UART1, ENABLE);

NVIC_InitStructure.NVIC_IRQChannel = UART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

UART_Cmd(UART1, ENABLE);
}

1 ● 編寫MM32F013x UART1中斷函數(shù)

MM32F013x UART1中斷服務(wù)函數(shù),同時(shí)將收到的數(shù)據(jù)發(fā)送出去,代碼如下所示:

void UART1_IRQHandler(void)
{
u8 res;

if(UART_GetITStatus(UART1, UART_IT_RXIEN) != RESET)
{
//Receiving interrupts (data received must end at 0x0D 0x0a)
UART_ClearITPendingBit(UART1, UART_IT_RXIEN);

//read receive data.
res = UART_ReceiveData(UART1);

bsp_UART1_Send_Byte(res);
}
}

2 ● 編寫MM32F013x UART1發(fā)送函數(shù)

使用之前工程的MM32F0133C7P UART1發(fā)送函數(shù),代碼如下所示:

void bsp_UART1_Send_Byte(u8 dat)
{
UART_SendData(UART1, dat);

while(!UART_GetFlagStatus(UART1, UART_FLAG_TXEPT));
}

MM32F013x UART1 9bit通信功能演示

在main函數(shù)中調(diào)用SysTick和UART1 9bit通信初始化函數(shù),代碼如下所示:

s32 main(void)
{
//SysTick init
DELAY_Init();
//UART1 9bit init
bsp_UART1_9Bit_Init(115200);

while(1)
{
bsp_UART1_Send_Byte(0x55);

DELAY_Ms(500);
}
}

編譯工程代碼,然后燒錄軟件到MM32F0133C7P核心板上,用邏輯分析儀抓取UART1 9bit通信發(fā)送數(shù)據(jù)和接收數(shù)據(jù)的波形:

演示發(fā)送數(shù)據(jù):
以MM32F0133C7P發(fā)送0x55為例,使用邏輯分析儀抓取UART1 9bit通信發(fā)送數(shù)據(jù)的波形如下圖所示。

圖2

演示接收數(shù)據(jù):
上位機(jī)串口助手發(fā)送0xAA為例,使用邏輯分析儀抓取UART1 9bit通信收到的數(shù)據(jù)的波形,觀察箭頭所指第bit9位,如下圖3所示:

圖3

轉(zhuǎn)自:靈動(dòng)MM32MCU

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1FS4059B帶NTC升壓型兩節(jié)鋰電池充電管理IC數(shù)據(jù)手冊(cè)
  2. 3.24 MB   |  1次下載  |  免費(fèi)
  3. 2基于波形捕獲的超聲波傳感水流量計(jì)量技術(shù)應(yīng)用說明
  4. 1.01MB   |  1次下載  |  免費(fèi)
  5. 3ADE-12H混頻器規(guī)格書
  6. 0.28 MB   |  1次下載  |  5 積分
  7. 4AD9984A高性能10位顯示接口英文手冊(cè)
  8. 0.49 MB   |  1次下載  |  5 積分
  9. 551開發(fā)板芯片資料
  10. 14.95 MB   |  1次下載  |  1 積分
  11. 6用TL431LI-Q1監(jiān)控電流供應(yīng)
  12. 176.71KB   |  1次下載  |  免費(fèi)
  13. 7Q1和非Q1器件的TPS54340/360/540/560和TPS54340B/360B/540B/560B之間的差異
  14. 123.6KB   |  次下載  |  免費(fèi)
  15. 8TPS512xx MOSFET驅(qū)動(dòng)電路設(shè)計(jì)指南
  16. 886.86KB   |  次下載  |  免費(fèi)

本月

  1. 1HFSS電磁仿真設(shè)計(jì)應(yīng)用詳解PDF電子教程免費(fèi)下載
  2. 24.30 MB   |  129次下載  |  1 積分
  3. 2繼電保護(hù)原理
  4. 2.80 MB   |  42次下載  |  免費(fèi)
  5. 3正激、反激、推挽、全橋、半橋區(qū)別和特點(diǎn)
  6. 0.91 MB   |  36次下載  |  1 積分
  7. 4GBT 4706.1-2024家用和類似用途電器的安全第1部分:通用要求
  8. 7.43 MB   |  18次下載  |  免費(fèi)
  9. 5在設(shè)計(jì)中使用MOSFET瞬態(tài)熱阻抗曲線
  10. 1.57MB   |  15次下載  |  免費(fèi)
  11. 6AD18學(xué)習(xí)筆記
  12. 14.47 MB   |  8次下載  |  2 積分
  13. 7H橋中的電流感測(cè)
  14. 545.39KB   |  7次下載  |  免費(fèi)
  15. 8幾張電動(dòng)車充電器電路圖
  16. 0.23 MB   |  6次下載  |  1 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935113次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
  4. 1.48MB  |  420061次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233084次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費(fèi)下載
  8. 340992  |  191360次下載  |  10 積分
  9. 5十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  10. 158M  |  183329次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81578次下載  |  10 積分
  13. 7Keil工具M(jìn)DK-Arm免費(fèi)下載
  14. 0.02 MB  |  73804次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65985次下載  |  10 積分