找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11146|回复: 1
打印 上一主题 下一主题
收起左侧

zigbee串口波特率的设置方法

[复制链接]
跳转到指定楼层
楼主
ID:104287 发表于 2016-1-31 02:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 51黑fan 于 2016-1-31 02:25 编辑

D4~D0为波特率设置:

波特率
指数值
小数部分
2400
6
59
4800
7
59
9600
8
59
14400
8
216
19200
9
59
28800
9
216
38400
10
59
57600
10
216
76800
11
59
115200
11
216
230400
12
216



本次实验将会学习如果使用串口实现与PC机的通讯。试验中需要PC机与开发板之间使用USB-RS232线连接。

本次实验所学习到的寄存器:

CLKCONCMD:时钟频率控制寄存器。
D7
D6
D5~D3
D2~D0
32KHZ时间振荡器选择
系统时钟选择
定时器输出标记
系统主时钟选择
D7位为32KHZ时间振荡器选择,,0为32KRC震荡,1为32K晶振。默认为1。
D6位为系统时钟选择。0为32M晶振,1为16M RC震荡。当D7位为0时D6必须为1。
D5~D3为定时器输出标记。000为32MHZ,001为16MHZ,010为8MHZ,011为4MHZ,100为2MHZ,101为 1MHZ,110为500KHZ,111为250KHZ。默认为001。需要注意的是:当D6为1时,定时器频率最高可采用频率为16MHZ。
D2~D0:系统主时钟选择:000为32MHZ,001为16MHZ,010为8MHZ,011为4MHZ,100为2MHZ,101为1MHZ,110为500KHZ,111为250KHZ。当D6为1时,系统主时钟最高可采用频率为16MHZ。

CLKCONSTA:时间频率状态寄存器。

D7
D6
D5~D3
D2~D0
当前32KHZ时间振荡器
当前系统时钟
当前定时器输出标记
当前系统主时钟
D7位为当前32KHZ时间振荡器频率。0为32KRC震荡,1为32K晶振。
D6位为当前系统时钟选择。0为32M晶振,1为16M RC震荡。
D5~D3为当前定时器输出标记。000为32MHZ,001为16MHZ,010为8MHZ,011为4MHZ,100为2MHZ,101为 1MHZ,110为500KHZ,111为250KHZ。
D2~D0为当前系统主时钟。000为32MHZ,001为16MHZ,010为8MHZ,011为4MHZ,100为2MHZ,101为1MHZ,110为500KHZ,111为250KHZ。

U0CSR:USART0控制与状态;
D7
D6
D5
D4
D3
D2
D1
D0
模式选择
接收器使能
SPI主/从模式
帧错误状态
奇偶错误状态
接受状态
传送状态
收发主动状态
D7为工作模式选择,0为SPI模式,1为USART模式
D6为UART接收器使能,0为禁用接收器,1为接收器使能。
D5为SPI主/从模式选择,0为SPI主模式,1为SPI从模式。
D4为帧错误检测状态,0为无错误,1为出现出错。
D3为奇偶错误检测,0为无错误出现,1为出现奇偶校验错误。
D2为字节接收状态,0为没有收到字节,1为准备好接收字节。
D1为字节传送状态,0为字节没有被传送,1为写到数据缓冲区的字节已经被发送。
D0为USART接收/传送主动状态,0为USART空闲,1为USART忙碌。

U0GCR:USART0通用控制寄存器;
D7
D6
D5
D4~D0
SPI时钟极性
SPI时钟相位
传送位顺序
波特率指数值
D7为SPI时钟极性:0为负时钟极性,1为正时钟极性;
D6为SPI时钟相位:
D5为传送为顺序:0为最低有效位先传送,1为最高有效位先传送。
D4~D0为波特率设置:
波特率
指数值
小数部分
2400
6
59
4800
7
59
9600
8
59
14400
8
216
19200
9
59
28800
9
216
38400
10
59
57600
10
216
76800
11
59
115200
11
216
230400
12
216

U0BAUD:波特率控制小数部分。(取值参考上表)


源代码:

  1. #include <ioCC2530.h>
  2. #include <string.h>

  3. #define  uint  unsigned int
  4. #define  uchar unsigned char

  5. //定义控制灯的端口
  6. #define RLED  P1_0
  7. #define GLED  P1_1
  8. //函数声明
  9. void Delay(uint);
  10. void initUARTSEND(void);
  11. void UartTX_Send_String(char *Data,int len);

  12. char Txdata[25]="FEIBIT  Electronics";

  13. void Delay(uint n)
  14. {
  15.     uint i;
  16.     for(i=0;i<n;i++);
  17.     for(i=0;i<n;i++);
  18.     for(i=0;i<n;i++);
  19.     for(i=0;i<n;i++);
  20.     for(i=0;i<n;i++);
  21. }

  22. void initUARTSEND(void)
  23. {

  24.     CLKCONCMD &= ~0x40;                          //设置系统时钟源为32MHZ晶振
  25.     while(CLKCONSTA & 0x40);                     //等待晶振稳定
  26.     CLKCONCMD &= ~0x47;                          //设置系统主时钟频率为32MHZ
  27.    
  28.   
  29.     PERCFG = 0x00;                //位置1 P0口
  30.     P0SEL = 0x3c;                //P0_2,P0_3,P0_4,P0_5用作串口
  31.     P2DIR &= ~0XC0;                             //P0优先作为UART0

  32.     U0CSR |= 0x80;                //UART方式
  33.     U0GCR |= 9;                       
  34.     U0BAUD |= 59;                //波特率设为19200
  35.     UTX0IF = 0;                                 //UART0 TX中断标志初始置位0
  36. }

  37. void UartTX_Send_String(char *Data,int len)
  38. {
  39.   int j;
  40.   for(j=0;j<len;j++)
  41.   {
  42.     U0DBUF = *Data++;
  43.     while(UTX0IF == 0);
  44.     UTX0IF = 0;
  45.   }
  46. }

  47. void main(void)
  48. {   
  49.     uchar i;
  50.            P1DIR = 0x03;                 //P1控制LED
  51.     RLED = 1;
  52.     GLED = 0;                //关LED
  53.     initUARTSEND();
  54.     UartTX_Send_String(Txdata,25);            //FEIBIT Electronics
  55.         for(i=0;i<30;i++)Txdata[i]=' ';
  56.         strcpy(Txdata," www.51hei.com ");       //将UART0 TX test赋给Txdata;
  57.     while(1)
  58.     {
  59.            UartTX_Send_String(Txdata,sizeof(" www.51hei.com ")); //串口发送数据
  60.             Delay(50000);                                                       //延时
  61.             GLED=!GLED;                                           //标志发送状态
  62.             Delay(50000);
  63.             Delay(50000);
  64.     }
  65. }
复制代码




实验总结:
波特率的设置方法:

波特率由U0GCR中的低5位和U0BAUD决定,例如:
U0GCR |= 9;               
U0BAUD |= 59;

以上代码将波特率设为19200。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:145805 发表于 2017-11-21 21:40 | 只看该作者
我下了proteus8.6,没看到stm32的芯片
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表