澳门扒仔回忆录登入: [技术问答] 关于新塘ML51串口波特率的问题,直接用24M时钟产生115200波...

江山VR彩票百家乐计划群大全
367|8
楼主
本帖最后由 新塘初级用户 于 2020-7-30 09:49 编辑
  1. <div class="blockcode"><blockquote>#include "ML51.h"
  2. #include "BC26.h"

  3. unsigned char uart_receive_data,bufhead;
  4. bit receiveFlag,bufOverFlag;
  5. unsigned        char temp;


  6. void Uart0_Init(void);

  7. void Uart0_SendChar(unsigned char Udat);
  8. void Uart0_SendString(unsigned char *PBuf);

  9. typedef struct _UART_BUF      //定义数组
  10. {
  11.     char buf [BUFLEN+1];               
  12.     unsigned int index ;
  13. }UART_BUF;

  14. void Clear_Buffer(void)       //清空数组
  15. {
  16.     Delay_ms(30);
  17.     buf_uart2.index=0;
  18.     memset(buf_uart2.buf,0,BUFLEN);
  19. }

  20. void nbiot_receive_process_event(unsigned char ch )     //将SBUF保存进数组
  21. {
  22.      if(buf_uart2.index >= BUFLEN)
  23.     {
  24.         buf_uart2.index = 0 ;
  25.     }
  26.       else{
  27.                                 buf_uart2.buf[buf_uart2.index] = ch;
  28.         buf_uart2.index++;
  29.          }
  30. }


  31. void BC26_Init(void)                   //打印数组
  32. {

  33. Uart0_SendString(buf_uart2.buf);

  34. }
  35.          



  36. void USART2_IRQHandler() interrupt 4      //串口接收中断     
  37. {
  38. if (RI)
  39. {
  40. RI=0;
  41. temp=SBUF;
  42. nbiot_receive_process_event(temp);
  43. BC26_Init();


  44. }
  45. if (TI)
  46. {

  47. TI=0;
  48. }
  49. }








  50. void Uart0_SendChar(unsigned char Udat)
  51. {
  52. SBUF=Udat;
  53. while(!TI);
  54. TI=0;
  55. }

  56. void Uart0_SendString(unsigned char *PBuf)       //打印字符串
  57. {
  58. while(*PBuf!='\0')
  59. {
  60. Uart0_SendChar(*PBuf);
  61. PBuf++;
  62. }
  63. }





  64. void main (void)
  65. {
  66. MFP_P46_GPIO;
  67. P46_PUSHPULL_MODE;

  68. MFP_P31_UART0_TXD;
  69. MFP_P30_UART0_RXD;
  70. P31_QUASI_MODE;
  71. P30_QUASI_MODE;

  72. UART_Open(24000000,UART0_Timer1,115200);
  73. UART_Interrupt_Enable(UART0,Enable);       
  74. ENABLE_GLOBAL_INTERRUPT;

  75. while(1)

  76. {

  77. Delay_ms(10000);

  78. Clear_Buffer();
  79. }


  80. }
复制代码



我用N76E003做串口通信,将16M改成16.6M才使得串口波特率误差小,现在要把N76E003移植到ML51,结果发现ML51产生的波特率误差较大,有没有人会改ML51时钟
沙发
 楼主 | 2020-7-30 09:28 | 只看该作者
这是我写的串口通信的程序

ML51uart0BC26.zip

411.12 KB, 下载次数: 2

板凳
 楼主 | 2020-7-30 09:55 | 只看该作者

这是N76E003改时钟的例程,想问下可不可以用这个改ML51,具体怎么改呢
地板
 楼主 | 2020-7-30 10:01 | 只看该作者

原本程序里面设计的是发送什么返回什么,但是串口调试是这个现象,我以前调试N76E003的时候就是改时钟解决,想问下ml51有没有改时钟解决这个的办法
5
| 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
| 2020-7-30 12:58 | 只看该作者
或许修改的方式是一样的。
8
| 2020-7-30 12:59 | 只看该作者
不过手册没有提,可以修改,只是说校准后的时钟24M,,,所以难以断定。
9
 楼主 | 2020-7-30 16:05 | 只看该作者
我解决了,原来是还要开启全局中断才行,波特率那里会有一点点很微小的误差,但影响不大
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

江山VR彩票百家乐计划群大全 永利游戏开户直营 返回顶部 返回列表
澳门金沙效应 百盛彩票在线开户 江山VR彩票百家乐计划群大全 申博138官网游戏网上娱乐场 圣淘沙娱乐YG
大发888娱乐场注册登入 菲律宾申博现金直营网现金网 现今最流行的博彩网站 博彩业现状登入 网络赌博一个平台不同网站登入
澳门角子机 玩法网上娱乐场 澳门赌场酒店价格 三盏灯到威尼斯人网上娱乐场 维多利亚天津快乐十分开奖结果 申博太阳城申博现金网网上娱乐场
菲律宾申博太阳城官方网址 申博电话号码手机客户端下载登入 金沙直营赌场登入 申博会员注册手机客户端下载登入 怎么样去澳门工作登入