STC11系列单片机有办法让波特率达到345600吗
主机为STM32单片机,从机为STC11F04E单片机,要求波特率为345600,如何达到? 做梦的时候能达到{:smile:} janafar 发表于 2014-9-18 20:28做梦的时候能达到
我也这么觉得。。。。。。。所以很坑。。。 记号 关注 15系列自定义内部震荡频率,应该可以的。11系列怕是没有正好的晶体购买到。 做梦何止这么多,我怀疑波特率为2.4G都有可能哦! 有办法,不是满带宽的情况下再在中间用一片STM32去转接,DMA传输{:lol:}{:lol:}{:lol:} 使用33.1176晶体
void UartInit(void) //345600bps@33.1176MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFD; //设定定时初值
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
} 使用11.0592MHz晶体
void UartInit(void) //345600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xFE; //串口1选择定时器1为波特率发生器
TMOD &= 0x0F; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
TL1 = 0xFF; //设定定时初值
TH1 = 0xFF; //设定定时器重装值
ET1 = 0; //禁止定时器1中断
TR1 = 1; //启动定时器1
} 独立波特率发生器,不使用定时器
void UartInit(void) //345600bps@11.0592MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
BRT = 0xFF; //设定独立波特率发生器重装值
AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器
AUXR |= 0x10; //启动独立波特率发生器
}
void UartInit(void) //345600bps@133.1176MHz
{
PCON &= 0x7F; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
BRT = 0xFD; //设定独立波特率发生器重装值
AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器
AUXR |= 0x10; //启动独立波特率发生器
}
哪个还有问题? 丢不丢数?带不带隔离?
那么高的波特率,不丢帧么 有意义吗? 达到没有问题,关键是传输的稳定性 为毛要这么高的波特率,实在搞不懂??? 饭桶 发表于 2014-9-18 20:59
void UartInit(void) //345600bps@133.1176MHz
{
PCON &= 0x7F; //波特率不倍速
我的是9位数据~TB8和RB8也是数据 bluestone2012 发表于 2014-9-18 21:11
丢不丢数?带不带隔离?
带隔离了应该~ lgg88 发表于 2014-9-19 08:37
为毛要这么高的波特率,实在搞不懂???
没办法,对方要求这么搞,基本都在接数据,发数据的情况很少 void UartInit(void)
{
PCON &= 0x7F; //波特率不倍速
SCON = 0xD0; //9位数据,可变波特率
AUXR |= 0x04; //独立波特率发生器时钟为Fosc,即1T
BRT = 0xFD; //设定独立波特率发生器重装值
AUXR |= 0x01; //串口1选择独立波特率发生器为波特率发生器
AUXR |= 0x10; //启动独立波特率发生器
}
345K 传声音没问题了吧 bbs2009 发表于 2014-9-19 11:43
貌似 可以使用 SERIAL PORTMODE 2 , 时钟 11.0592 Mhz 或22.1184 Mhz均可。
不用定时器,不用独立 ...
多谢,已经成功使用方式2做到了
页:
[1]