資料介紹
在之前的微課堂中和大家分享過(guò)靈動(dòng)MM32系列MCU的UART通信實(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ù)。我們通常希望只有被尋址的接收者才被激活,來(lái)接收隨后的數(shù)據(jù),這樣就可以減少由未被尋址的接收器的參與帶來(lái)的多余的UART服務(wù)開(kāi)銷。未被尋址的設(shè)備可啟用其靜默功能置于靜默模式。在靜默模式里,任何接收狀態(tài)位都不會(huì)被設(shè)置,所有接收中斷被禁止。
以MM32F013x系列MCU的UART通信為例,通過(guò)一個(gè)示例Demo介紹UART 9bit通信的同步幀方式。
一、與UART 9bit通信相關(guān)的寄存器
![](https://file.elecfans.com/web1/M00/DB/C8/pIYBAGAH2oKAGZoYAAE7VxWBs8w690.png)
如上圖1所示為UART通用控制寄存器UART_CCR,在MM32F013x UM手冊(cè)的第489和第490頁(yè)有關(guān)于該寄存器位的詳細(xì)描述。本實(shí)例用到的UART通用控制寄存器UART_CCR位說(shuō)明如下:
Bit11
B8EN(rw, reset:0x00)UART同步幀發(fā)送第9bit使能控制位。該位使能后校驗(yàn)使能PEN不起作用。
1:使能同步幀第9bit發(fā)送。
庫(kù)函數(shù)設(shè)置:
UART_Enable9bit(UART1, ENABLE)
0:禁止同步幀第9bit發(fā)送。
庫(kù)函數(shù)設(shè)置:
UART_Enable9bit(UART1, DISABLE)
Bit10
B8TOG(rw,reset:0x00)UART同步幀發(fā)送第9bit自動(dòng)翻轉(zhuǎn)控制位。
1:使能第9bit自動(dòng)翻轉(zhuǎn)。
庫(kù)函數(shù)設(shè)置:
UART_Set9bitAutomaticToggle(UART1, ENABLE)
0:禁止第9bit自動(dòng)翻轉(zhuǎn)。
庫(kù)函數(shù)設(shè)置:
UART_Set9bitAutomaticToggle(UART1, DISABLE)
注:在 B8TXD 和 B8POL 的值相同時(shí),在配置完寄存器后傳輸?shù)牡诙€(gè)數(shù)據(jù)開(kāi)始翻轉(zhuǎn),第一個(gè)數(shù)據(jù)默認(rèn)為地址位。
Bit8
B8TXD(rw,reset:0x00)UART同步幀發(fā)送數(shù)據(jù)第9bit。
1:發(fā)送同步幀第9bit為高電平。
庫(kù)函數(shù)設(shè)置:
UART_Set9bitLevel(UART1, ENABLE)
0:發(fā)送同步幀第9bit為低電平。
庫(kù)函數(shù)設(shè)置:
UART_Set9bitLevel(UART1, DISABLE)
二、程序配置
初始化MM32F013x UART1 9bit通信
從官網(wǎng)下載MM32F013x例程,以MM32F0133C7P的UART1通信為例,增加與UART 9bit通信相關(guān)的寄存器位的初始化,這里以庫(kù)函數(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 ● 編寫(xiě)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 ● 編寫(xiě)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ù)的波形如下圖所示。
![](https://file.elecfans.com/web1/M00/DB/4B/o4YBAGAH2sCAfnq0AAAuC_MazjY956.jpg)
演示接收數(shù)據(jù):
以上位機(jī)串口助手發(fā)送0xAA為例,使用邏輯分析儀抓取UART1 9bit通信收到的數(shù)據(jù)的波形,觀察箭頭所指第bit9位,如下圖3所示:
![](https://file.elecfans.com/web1/M00/DB/4B/o4YBAGAH2v6AdjvJAAAFTNtxgTs125.png)
轉(zhuǎn)自:靈動(dòng)MM32MCU
- MM32F013x——ADC任意通道工作模式
- MM32F013x——RTC鬧鐘定時(shí)喚醒
- MM32F013x——移植EasyLogger組件
- MM32F013x——UART 9bit 通信
- MM32F013x——UART 多處理器通信
- MM32F013x——UART 極性取反通信
- MM32F013x——UART 單線半雙工通信
- MM32F013x——UART ISO7816-3協(xié)議的應(yīng)用
- MM32F013x——ADC任意通道工作模式
- MM32F013x——移植EasyFlash組件
- MM32F013x——移植EasyLogger組件
- 基于ARM Cortex M0的微控制器MM32F013x 22次下載
- MM32F013x——UART 單線半雙工通信
- MM32F013x——UART 極性取反通信
- MM32F013x——UART 多處理器通信
- UART通信協(xié)議介紹和數(shù)據(jù)傳輸工作流程 880次閱讀
- 【GD32 MCU 移植教程】9、從 STM32F10x 系列移植到 GD32F30x 系列 896次閱讀
- 簡(jiǎn)單認(rèn)識(shí)UART串行通信協(xié)議 2200次閱讀
- MM32F0140 DMA學(xué)習(xí)筆記 735次閱讀
- 基于STM32模擬UART串口通信 1703次閱讀
- 基于FPGA實(shí)現(xiàn)多路UART/SPI通信系統(tǒng) 1683次閱讀
- 基于MM32F5270控制器的I2S音頻播放 2432次閱讀
- UART串口通信協(xié)議詳解 7434次閱讀
- stm32串口奇偶校驗(yàn) 1.1w次閱讀
- 基于Verilog的UART串行通信接口電路設(shè)計(jì) 2461次閱讀
- 淺談UART通信協(xié)議 UART接收數(shù)據(jù)時(shí)序設(shè)計(jì) 8573次閱讀
- 串口通信的原理,IO口模擬UART串口通信 2.2w次閱讀
- 單片機(jī)通信uart和modbus有什么區(qū)別 2w次閱讀
- 單片機(jī)之間UART通信示意圖分享 1.6w次閱讀
- k9f1208完整手冊(cè) k9f1208數(shù)據(jù)表Datasheet資料下載 2854次閱讀
下載排行
本周
- 1IP6823 支持 qi 認(rèn)證的無(wú)線充電發(fā)射控制 SOC
- 1.01 MB | 1次下載 | 免費(fèi)
- 2IP6824? 全集成QI?無(wú)線充電發(fā)射控制SOC
- 1.22 MB | 1次下載 | 免費(fèi)
- 3GD32G5x3 FFT模塊用戶指南
- 920.15KB | 次下載 | 免費(fèi)
- 4GD32H73x/H75x的器件限制
- 774.05KB | 次下載 | 免費(fèi)
- 5PDTA115EU配備PNP電阻的晶體管規(guī)格書(shū)
- 189.74KB | 次下載 | 免費(fèi)
- 6帶注入電流控制的1.8V通用SP8T-Z和2個(gè)SP4T-Z模擬開(kāi)關(guān)
- 847.62KB | 次下載 | 免費(fèi)
- 7PESD18VY1BBIF保護(hù)二極管規(guī)格書(shū)
- 4.56MB | 次下載 | 免費(fèi)
- 8視頻處理器晶振應(yīng)用方案
- 515.02 KB | 次下載 | 免費(fèi)
本月
- 1A7159和A7139射頻芯片的資料免費(fèi)下載
- 0.20 MB | 55次下載 | 5 積分
- 2零死角玩轉(zhuǎn)STM32F103—指南者
- 26.78 MB | 41次下載 | 1 積分
- 3PIC12F629/675 數(shù)據(jù)手冊(cè)免費(fèi)下載
- 2.38 MB | 36次下載 | 5 積分
- 4PIC16F716 數(shù)據(jù)手冊(cè)免費(fèi)下載
- 2.35 MB | 18次下載 | 5 積分
- 5dsPIC33EDV64MC205電機(jī)控制開(kāi)發(fā)板用戶指南
- 5.78MB | 8次下載 | 免費(fèi)
- 6STC15系列常用寄存器匯總免費(fèi)下載
- 1.60 MB | 7次下載 | 5 積分
- 7AN-1267: 使用ADSP-CM408F ADC控制器的電機(jī)控制反饋采樣時(shí)序
- 1.41MB | 5次下載 | 免費(fèi)
- 8LP9962集成 PFC 和 和的 高壓半橋驅(qū)動(dòng)的 LLC 諧振
- 3.30 MB | 4次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935124次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420063次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233088次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191367次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73813次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評(píng)論