糾錯:u0dbuf傳送緩衝區,但是我在中文手冊手冊上沒有找的到這個暫存器,手冊上只有u0buf,u0buf編譯會出錯,
我去查了下英文手冊,才發現原來是翻譯人員翻譯錯誤了,只有u0dbuf,建議看英文手冊。
串列埠通訊:
p_2 接收端 p_3傳送端(微控制器和電腦的電頻不同,通過pl2303轉換,這是針對zigbee模組的
,想51微控制器可以通過232,485來轉換)。
ttl 輸出:低電平小於0.8,高電平大於2.4 。ttl 輸入:低電平小於1.2,高電平大於2
p_2和p_3可以復用到串列埠,也可以復用到spi
#include
void *memcpy(void *, const void *, size_t);//複製函式
void *memset(void *, int, size_t);//設定函式,注意是傳遞的指標,這些很基礎,是c語言庫裡面的函式介面,自己下個c語言完全手冊看
int memcmp(const void *, const void *, size_t);
clkconcmd &= ~0x40; //設定系統時鐘源為32mhz晶振
while(clkconsta & 0x40); //等待晶振穩定為32m
clkconcmd &= ~0x47; //設定系統主時鐘頻率為32mhz
void uartsendstring(char *data, int len)//串列埠傳送函式data:傳送緩衝區 len:傳送長度
#pragma vector = urx0_vector
__interrupt void uart0_isr(void)
u0csr &= ~0x40; //禁止接收 傳送的時候必須把這個禁止了
u0csr |= 0x40; //允許接收
用到的暫存器如下:
u0csr 暫存器
bit[7] usart模式選擇 0:spi模式 1:uart模式
bit[6] uart接收器使能 0: 禁用接收器 1: 接收器使能
bit[5] sp 主或者從模式選擇 0: spi 主模式 1: spi 從模式
bit[4] uart 幀錯誤狀態 0: 無幀錯誤檢測 1: 位元組收到不正確停止位級別
bit[3] uart 奇偶錯誤狀態 0: 無奇偶錯誤檢測 1: 位元組收到奇偶錯誤
bit[2] 接收位元組狀態 0: 沒有收到位元組 1: 準備好接收位元組
bit[1] 傳送位元組狀態 0 位元組沒有被傳送 1 寫到資料快取暫存器的最後位元組被傳送
bit[0] usart 傳送/接收主動狀態、在 spi 從模式該位等於從模式選擇 0: usart 空閒 1: 在傳送或者接收模式usart 忙碌
p2dir (0xff) – 埠 2 方向和埠 0 外設優先順序控制
[7:6]外設優先順序控制。當 percfg 分配給一些外設 到 相同引腳的時候,這些位將確定優先順序。
詳細優先順序列表:
00:第1優先順序:usart0第2優先順序:usart1 第3優先順序:定時器 1
01:第1優先順序:usart1第2優先順序:usart0 第3優先順序:定時器 1
10:第1優先順序:定時器1通道0-1第2優先順序:usart1第3優先順序:usart0第4優先順序:定時器 1 通道 2 – 3
11 :第 1 優先順序:定時器1通道 2-3第2優先順序:usart0第3優先順序:usart1第4優先順序:定時器 1 通道 0 – 1
[5] 不使用
[4:0] p2 . 4 到 p2 . 0 的 i/o 方向 0 : 輸入 1 : 輸出
percfg (0xf1) – 外設控制
[7] 沒有使用
[6]定 時器1的i/o位置0 :備用 位置 1 1 :備用 位置 2
[5]定 時器3的i/o位置0 :備用 位置 1 1 :備用 位置 2
[4]定 時器4的i/o位置0 :備用 位置 1 1 :備用 位置 2
[3:2] 沒有使用
[1]usart1的i/o位置0備用位置1 1:備用位置2
[0]usart0的i/o位置0備用位置1 1:備用位置2
u0gcr (0xc5) – usart 0 通用控制
位 名稱 復位 描述
[7]spi 的時鐘極性0:負時鐘極性 1:正時鐘極性
[6]spi 時鐘相位0:當sck從cpol倒置到cpol時資料輸出到mosi,並且當sck從cpol倒置到
cpol 時資料輸入抽樣到 miso 。1:當sck從cpol倒置到cpol時資料輸出到 mosi 並且當
sck 從 cpo l倒置到 cpol 時資料輸入抽樣到 miso 。
[5] 傳送位順序 0 : lsb 先傳送 1 : msb 先傳送
[4:0] baud_e[4:0] 波特率指數值。 baud_e 和 baud_m 決定了 uart 波特率 和 spi 的主 sck 時
鐘頻率。
u0baud (0xc2) – usart 0 波特率控制
[7:0]baud_m[7:0]波特率小數部分的值。baud_e和baud_m決定了uart的波特率和spi的主sck時鐘頻率。
注意:baud_e[4:0]和baud_m[7:0]決定波特率
表 16-1 32 mhz 系統時鐘常用的波特率設定
波特率 ( b ps) uxbaud.baud_m uxgcr.baud_e
誤差 ( % )
2400 59 6
0.14
4800 59 7
0.14
9600 59
8 0.14
14400 216
8 0.03
19200 59
9 0.14
28800
216
90.03
38400
59 10
0.14
57600
216
100.03
76800
59 11
0.14
115200
216
110.03
230400
216
120.03
ZigBee學習二 UART通訊
在使用串列埠時,只需掌握zigbee協議棧提供的串列埠操作相關的三個函式即可。uint8 haluartopen uint8 port,haluartcfg t config uint16 haluartread uint8 port,uint8 buf,uint16 len uint16 halu...
zigbee學習之zigbee應用框架
乙個zigbee 網路裝置之間通訊的關鍵是乙個關於profile 的協議。一種profile 的例子是家庭自動化。這個zigbee profile 允許一系列裝置型別交換控制資訊,以形成乙個無線家庭自動化應用。這些裝置的目的是交換已知資訊來實現控制,比如開關燈,給照明控制器傳送乙個照明感測測量,或如...
串列埠通訊學習
1,什麼是串列埠?2,什麼是rs 232?3,什麼是rs 422?4,什麼是rs 485?5,什麼是握手?1,什麼是串列埠?串列埠是計算機上一種非常通用裝置通訊的協議 不要與通用序列匯流排universal serial bus或者usb混淆 大多數計算機包含兩個基於rs232的串列埠。串列埠同時也...