Dark_kill1 2023-03-17 19:37 采纳率: 0%
浏览 83

合泰ht66F2390串口

你好,我能向你询问一下合泰单片机的问题么?

#include "HT66F2390.h"
#include "ht_sr04.h"
#include "HX711.h"

typedef    unsigned long    u32;
typedef    unsigned short    u16;
#define    fH        8000000    
#define BR        38400     //波特率
#define    fH1        8000000    
#define BR1        38400
void Delayms(u16 del)
{    u16 i;
    for(i=0;i<del;i++) GCC_DELAY(2000);
}

void send_char(char s)//发送一个单字符
{
        _txr_rxr0=s;
        while(!_txif0);    
}
void send_char1(char s)//发送一个单字符
{
        _txr_rxr1=s;
        while(!_txif1);    
}
//发送一个字符串,注意如果发送的是字符数组,末尾必须加上'\0',否则将会出错
void send_buff(char *s)
{
    while(*s)
    {
        send_char(*s);
        s++;
    }
}
void send_buff1(char *s)
{
    while(*s)
    {
        send_char1(*s);
        s++;
    }
}
void inituart()
{
    /*_wdtc=0b10101111;      //关闭看门狗
    _pas1=0b11000000;      //PA7为TX0功能、PA6为RX0功能
    _u0cr1=0b10000000; //使能UART0,8-bit数据传输,关闭奇偶校验功能,1位停止位,不发送暂停字。
    _u0cr2=0b11100100;  //使能发送器,使能接收器,高速波特率,关闭地址检测功能,关闭RX0唤醒功                    能,使能接收器中断功能,关闭发送器空闲中断,关闭发送器已空中断
    _brg0=fH/((u32)16*BR)-1;  //配置波特率
    _ur0e = 1;     //开启中断标志位
    _pds0=0b00101000;//PD2为TX1功能、PD1为RX1功能
    _u1cr1=0b10000000; //使能UART1,8-bit数据传输,关闭奇偶校验功能,1位停止位,不发送暂停字。
    _u1cr2=0b11100100;  //使能发送器,使能接收器,高速波特率,关闭地址检测功能,关闭RX0唤醒功能,使能接收器中断功能,关闭发送器空闲中断,关闭发送器已空中断
    _brg1=fH1/((u32)16*BR1)-1;  //配置波特率19200
    _ur1e = 1;     //开启中断标志位
    _mf5e=1;        
    _emi=1;*/



    _wdtc=0b10101111;      //关闭看门狗
    _pas1=0b11000000;      //PA7为TX0功能、PA6为RX0功能
    _u0cr1=0b10000000; //使能UART0,8-bit数据传输,关闭奇偶校验功能,1位停止位,不发送暂停字。
    _u0cr2=0b11100100;  //使能发送器,使能接收器,高速波特率,关闭地址检测功能,关闭RX0唤醒功                    能,使能接收器中断功能,关闭发送器空闲中断,关闭发送器已空中断
    _brg0=fH/((u32)16*BR)-1;  //配置波特率
    _ur0e = 1;     //开启中断标志位
    _mf5e=1;        
    _emi=1;
}
void inituart2()
{
    _wdtc=0b10101111;      //关闭看门狗
    _pds0=0b00101000;//PD2为TX1功能、PD1为RX1功能
    _u1cr1=0b10000000; //使能UART1,8-bit数据传输,关闭奇偶校验功能,1位停止位,不发送暂停字。
    _u1cr2=0b11100100;  //使能发送器,使能接收器,高速波特率,关闭地址检测功能,关闭RX0唤醒功能,使能接收器中断功
    _brg1=fH1/((u32)16*BR1)-1;  //配置波特率19200
    _ur1e = 1;     //开启中断标志位
    _mf5e=1;        
    _emi=1;
    
}

int get_buff(char *rbuff,char c){
          int data_count=0;
        char  rdata;
        while(1){
            while(!_rxif0); 
            rdata =_txr_rxr0;
            if(rdata==c)
            {
                rbuff[data_count]='\0';
                return data_count;
            }
            rbuff[data_count]=rdata;
            data_count++;
        }
}
int get_buff1(char *rbuff,char c){
          int data_count=0;
        char  rdata;
        while(1){
            while(!_rxif1); 
            rdata =_txr_rxr1;
            if(rdata==c)
            {
                rbuff[data_count]='\0';
                return data_count;
            }
            rbuff[data_count]=rdata;
            data_count++;
        }
}
void ht_sr()
{
    echo_t=1;              //输入模式
    trig_t=0;               //输出模式
    char B[3]={'c','m','\0'};
    char A[4]={'\0'};
    fabo();                            
    while(!echo);               //当echo为零时等待
    _pt2on=1;                   //开始计数
    while(echo);               //当echo为1计数并等待
    _pt2on=0;                   //关闭计数器
    conut();                    //计算
    lltos(A,S);                    //转字节
    send_buff(A);
    send_buff(B);

}
void hx(){
    ADSKc=0;            //HX711
    ADDOc=1;            //HX711
    unsigned char take1[8]={'\0'};
    AdVal=ReadCount();
    weight=AdVal/1000-FullScale/1000;  
    take1[0]=weight/1000+48;
    take1[1] =weight%1000/100+48;
    take1[2]='.';
    take1[3] =weight%100/10+48;
    take1[4] =weight%10+48;//体重
    take1[5]='k';
    take1[6]='g';
    send_buff(take1);
    
}

void main()
{

    //inituart();    
    inituart2();
    char B[3]={'c','m','\0'};
    while(1)
    {
     //ht_sr();
     //hx();
     Delayms(1000);
     send_buff1(B);
 //    send_buff(B);
    }            
}
//串口中断,当有数据发送给串口时,单片机收到这个数据,并通过串口再发回去
DEFINE_ISR(UART0,0x3C)
{
    char buff[50]={'\0'};
    char buff1[50]={'\0'};
    if(_ur0f==1)
    {
        get_buff(buff,'\n');
        send_buff(buff);
    }
    if(_ur1f==1)
    {
        get_buff1(buff1,'\n');
        send_buff1(buff1);
    }
    _mf5f=0;
    _ur0f=0;
    _ur1f=0;
    _emi=0;    
 
}
 
//DEFINE_ISR(UART0,0x3C)
//{
// 
//    char buff[100]={'\0'};
//    get_buff(buff,'\n');//获取一串字符串(该字符串要有换行符号)
//    send_buff(buff);//把接收到的字符串再发送出去
//    _ur0f = 0;    


这是我的代码,我在测试串口时串口二一直都没有反应,请问是我写了什么问题吗?
大boss请求拯救

  • 写回答

3条回答 默认 最新

  • lshen01 2023-03-17 19:42
    关注

    参考GPT和自己的思路:

    我看到你的代码中有两个串口,一个是 UART0,一个是 UART1。在你的代码中,UART0 的初始化和使用是正确的,但是对于 UART1 的初始化部分,你没有配置 PD1 和 PD2 的功能。我建议你使用类似于 _pds0=0b00101000 这样的语句来配置它们的功能。此外,如果你想要测试 UART1,你需要在发送和接收数据时使用对应的函数 send_char1get_buff1 。希望这能对你有所帮助。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月17日

悬赏问题

  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 Ubuntu开机显示器只显示kernel,是没操作系统(相关搜索:显卡驱动)
  • ¥15 VB.NET如何绘制倾斜的椭圆
  • ¥15 在rhel8中安装qemu-kvm时遇到“cannot initialize crypto:unable to initialize gcrypt“报错”
  • ¥15 arbotix没有/cmd_vel话题
  • ¥20 找能定制Python脚本的
  • ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
  • ¥15 用C语言怎么判断字符串的输入是否符合设定?
  • ¥15 通信专业本科生论文选这两个哪个方向好研究呀