单片机

串口发送命令控制播放音乐功能已正常

void Timer2Init(){  //作为波特率发生器用的

  AUXR |= 0x04;                  //定时器2为1T模式

//  AUXR &= ~0x04;                  //定时器2为12T模式

    //T2L = T1MS;                    //初始化计时值

    //T2H = T1MS >> 8;

T2L=0xE0;

T2H=0xFE;

    AUXR |= 0x10;                  //定时器2开始计时

    TMOD &= 0xF0; //设置定时器模式 不影响 其它的定时器

    IE2 |= 0x04;                    //开定时器2中断

    EA = 1;

}



在一个阳光明媚的中午,又来絮叨

波特率:单片机或计算机在串口通信时的速率

它是与时钟周期有关的

51的 1机器周期 = 12时钟周期

在51的方式0和方式1下,波特率公式很好计算

模式0为 Fosc / 12

      例如:外接24M晶振的单片机,他的机器周期 = 12/24M 秒

模式2为 Fosc / 32 或 Fosc / 64

  (SMOD= 1) (SMOD= 0)

模式1和模式3的波特率由定时器T1的溢出率与SMOD同时决定

      波特率 = T1溢出率 / n

定时时间 = (最大计数值 - 计数器初值)*机器周期

    = (256 - TH1) * (12 / 晶振频率)

    = ( (256 - TH1) * 12 ) / Fosc

溢出频率 = 1 / 定时时间

    = Fosc / ( (256 - TH1) * 12)

波特率 = ((2^SMOD)/32) *溢出频率,    SMOD = 0时

    = ((2^SMOD)/16) *溢出频率,    SMOD = 0时

以上是51的波特率与时钟的关系,下面是STM32F1xx的

Tx / Rx    波特率 = Fpclkx / (16 * USARTDIV)

其中,Fpclkx是给串口的时钟,一般我们知道波特率和时钟,即可求得USARTDIV

USARTDIV = 72000000 / (115200*16) = 39.0625

      = (pclk2 * 10^6) / (bound * 16)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容