吴忠躺衫网络科技有限公司

電子發燒友App

硬聲App

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

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

3天內不再提示
電子發燒友網>電子資料下載>嵌入式開發>MM32F013x——UART 9bit 通信

MM32F013x——UART 9bit 通信

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

資料介紹

在之前的微課堂中和大家分享過靈動MM32系列MCUUART通信實例,在此實例的基礎上我們增加UART 9bit通信功能。UART 9bit通信的作用是第9bit用于標識是地址或數據,第9bit 為1標識是從機地址,為0標識是數據,此外UART通信的第9bit也可作為數據的同步幀位使用。

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

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

一、與UART 9bit通信相關的寄存器

圖1

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

Bit11

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

1:使能同步幀第9bit發送。

庫函數設置:

UART_Enable9bit(UART1, ENABLE)

0:禁止同步幀第9bit發送。

庫函數設置:

UART_Enable9bit(UART1, DISABLE)

Bit10

B8TOG(rw,reset:0x00)UART同步幀發送第9bit自動翻轉控制位。

1:使能第9bit自動翻轉。

庫函數設置:

UART_Set9bitAutomaticToggle(UART1, ENABLE)

0:禁止第9bit自動翻轉。

庫函數設置:

UART_Set9bitAutomaticToggle(UART1, DISABLE)

注:在 B8TXD 和 B8POL 的值相同時,在配置完寄存器后傳輸的第二個數據開始翻轉,第一個數據默認為地址位。

Bit8

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

1:發送同步幀第9bit為高電平。

庫函數設置:

UART_Set9bitLevel(UART1, ENABLE)

0:發送同步幀第9bit為低電平。

庫函數設置:

UART_Set9bitLevel(UART1, DISABLE)

二、程序配置

初始化MM32F013x UART1 9bit通信

從官網下載MM32F013x例程,以MM32F0133C7P的UART1通信為例,增加與UART 9bit通信相關的寄存器位的初始化,這里以庫函數方式給出,增加的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中斷函數

MM32F013x UART1中斷服務函數,同時將收到的數據發送出去,代碼如下所示:

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發送函數

使用之前工程的MM32F0133C7P UART1發送函數,代碼如下所示:

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

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

MM32F013x UART1 9bit通信功能演示

在main函數中調用SysTick和UART1 9bit通信初始化函數,代碼如下所示:

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通信發送數據和接收數據的波形:

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

圖2

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

圖3

轉自:靈動MM32MCU

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

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費
  3. 2開關電源基礎知識
  4. 5.73 MB  |  6次下載  |  免費
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設計
  8. 0.60 MB  |  3次下載  |  免費
  9. 5基于FPGA的光纖通信系統的設計與實現
  10. 0.61 MB  |  2次下載  |  免費
  11. 6基于FPGA的C8051F單片機開發板設計
  12. 0.70 MB  |  2次下載  |  免費
  13. 751單片機窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費
  15. 8基于51單片機的RGB調色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21548次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537796次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191185次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
轮盘赌技巧| bet365直播| 百家乐赌博博彩赌博网| 娱乐百家乐官网下载| 百家乐官网长龙太阳城| 棋牌娱乐城| 德州扑克教学视频| 百家乐娱乐平台官网网| 大赢家百家乐66| 葡京百家乐官网的玩法技巧和规则 | 百家乐官网百姓话题| 娄烦县| 财神娱乐城打不开| 威尼斯人娱乐城代理开户| 百家乐赌博技巧网| 百家乐3带厂家地址| 新澳门百家乐官网的玩法技巧和规则| 百家乐官网游戏机出千| 皇冠备用网址| 巴登娱乐城信誉怎么样| 大发888赌博违法吗| 威尼斯人娱乐网注册送38元彩金| 线上百家乐的玩法技巧和规则 | YY百家乐官网的玩法技巧和规则| 澳门百家乐官网庄闲和| 百家乐官网娱乐全讯网| 百家乐官网娱乐分析软| 定远县| 百家乐赌博机假在哪里| 永利百家乐游戏| 在线百家乐官网策略| 尊龙百家乐官网娱乐场开户注册| 百家乐官网屏风| 百家乐官网网上投注系统| 百家乐官网试玩全讯网2| 百家乐官网d博彩论坛| 百家乐官网如何看牌| 平定县| 百家乐娱乐城| 能赢钱的棋牌游戏| 雁荡棋牌游戏|