打印
[技术问答]

关于新塘ML51串口波特率的问题,直接用24M时钟产生115200波...

[复制链接]
1174|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 新塘初级用户 于 2020-7-30 09:49 编辑
<div class="blockcode"><blockquote>#include "ML51.h"
#include "BC26.h"

unsigned char uart_receive_data,bufhead;
bit receiveFlag,bufOverFlag;
unsigned        char temp;


void Uart0_Init(void);

void Uart0_SendChar(unsigned char Udat);
void Uart0_SendString(unsigned char *PBuf);

typedef struct _UART_BUF      //定义数组
{
    char buf [BUFLEN+1];               
    unsigned int index ;
}UART_BUF;

void Clear_Buffer(void)       //清空数组
{
    Delay_ms(30);
    buf_uart2.index=0;
    memset(buf_uart2.buf,0,BUFLEN);
}

void nbiot_receive_process_event(unsigned char ch )     //将SBUF保存进数组
{
     if(buf_uart2.index >= BUFLEN)
    {
        buf_uart2.index = 0 ;
    }
      else{
                                buf_uart2.buf[buf_uart2.index] = ch;
        buf_uart2.index++;
         }
}


void BC26_Init(void)                   //打印数组
{

Uart0_SendString(buf_uart2.buf);

}
         



void USART2_IRQHandler() interrupt 4      //串口接收中断     
{
if (RI)
{
RI=0;
temp=SBUF;
nbiot_receive_process_event(temp);
BC26_Init();


}
if (TI)
{

TI=0;
}
}








void Uart0_SendChar(unsigned char Udat)
{
SBUF=Udat;
while(!TI);
TI=0;
}

void Uart0_SendString(unsigned char *PBuf)       //打印字符串
{
while(*PBuf!='\0')
{
Uart0_SendChar(*PBuf);
PBuf++;
}
}





void main (void)
{
MFP_P46_GPIO;
P46_PUSHPULL_MODE;

MFP_P31_UART0_TXD;
MFP_P30_UART0_RXD;
P31_QUASI_MODE;
P30_QUASI_MODE;

UART_Open(24000000,UART0_Timer1,115200);
UART_Interrupt_Enable(UART0,Enable);       
ENABLE_GLOBAL_INTERRUPT;

while(1)

{

Delay_ms(10000);

Clear_Buffer();
}


}



我用N76E003做串口通信,将16M改成16.6M才使得串口波特率误差小,现在要把N76E003移植到ML51,结果发现ML51产生的波特率误差较大,有没有人会改ML51时钟

使用特权

评论回复
沙发
新塘初级用户|  楼主 | 2020-7-30 09:28 | 只看该作者
这是我写的串口通信的程序

ML51uart0BC26.zip

411.12 KB

使用特权

评论回复
板凳
新塘初级用户|  楼主 | 2020-7-30 09:55 | 只看该作者

这是N76E003改时钟的例程,想问下可不可以用这个改ML51,具体怎么改呢

使用特权

评论回复
地板
新塘初级用户|  楼主 | 2020-7-30 10:01 | 只看该作者

原本程序里面设计的是发送什么返回什么,但是串口调试是这个现象,我以前调试N76E003的时候就是改时钟解决,想问下ml51有没有改时钟解决这个的办法

使用特权

评论回复
5
jasontu| | 2020-7-30 10:44 | 只看该作者
參考76E003改时钟的例程,把CLOCK OUT打出來。
修改-15的數值,觀察頻率輸出,就可以抓到規則。

使用特权

评论回复
6
新塘初级用户|  楼主 | 2020-7-30 11:39 | 只看该作者
jasontu 发表于 2020-7-30 10:44
參考76E003改时钟的例程,把CLOCK OUT打出來。
修改-15的數值,觀察頻率輸出,就可以抓到規則。 ...

意思是直接对 CLOCK 寄存器操作吗

使用特权

评论回复
7
yiy| | 2020-7-30 12:58 | 只看该作者
或许修改的方式是一样的。

使用特权

评论回复
8
yiy| | 2020-7-30 12:59 | 只看该作者
不过手册没有提,可以修改,只是说校准后的时钟24M,,,所以难以断定。

使用特权

评论回复
9
新塘初级用户|  楼主 | 2020-7-30 16:05 | 只看该作者
我解决了,原来是还要开启全局中断才行,波特率那里会有一点点很微小的误差,但影响不大

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

36

帖子

0

粉丝