OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 1948|回复: 4

通过串口调试助手输入数字调试来测试板载的硬件

[复制链接]

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
162
金钱
162
注册时间
2013-7-30
在线时间
31 小时
发表于 2018-3-21 14:27:03 | 显示全部楼层 |阅读模式
1金钱
例如刚开机
串口调试助手显示 如下内容
1、打开led
2、关闭led
3、开模块电源
.......

选择不同的数字测试不同的功能,这样类似的程序大家谁用,参考下!

最佳答案

查看完整内容[请看2#楼]

[mw_shl_code=applescript,true]static void Uart3_Task(void) { static u8 cpu_relay_state = 0; const char show_buf1[] = "ABC"; const char show_buf2[][5] = {"on","off"}; const u8 simulate_uart1_A[] = { 0xeb,0x90,0xeb,0x90,0xeb,0x90, 0x01, 0x11, 0x11, 0xEc,0x5C }; const u8 simulate_uart1_B[] = { 0xeb,0x90,0xeb,0x90,0xeb,0x90, 0x01, 0x11, 0x12, 0xac,0x5d }; const u8 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2018-3-21 14:27:04 | 显示全部楼层
[mw_shl_code=applescript,true]static void Uart3_Task(void)
{
        static u8 cpu_relay_state = 0;
        const char show_buf1[] = "ABC";
        const char show_buf2[][5] = {"on","off"};
        const u8 simulate_uart1_A[] = {
        0xeb,0x90,0xeb,0x90,0xeb,0x90,
        0x01,
        0x11,
        0x11,
        0xEc,0x5C
        };
        const u8 simulate_uart1_B[] = {
        0xeb,0x90,0xeb,0x90,0xeb,0x90,
        0x01,
        0x11,
        0x12,
        0xac,0x5d
        };
        const u8 simulate_uart1_C[] = {
        0xeb,0x90,0xeb,0x90,0xeb,0x90,
        0x01,
        0x11,
        0x13,
        0x6D,0x9d
        };
        u8 i;
       
        switch(rx3_dat[0])
        {
                case 0:
                        printf("NO.5:Calc relay time\n");
                        printf("NO.8:Ask relay time\n");
                        printf("NO.9:Fine tune relay time\n     [1]:1,+1;2,-1\n     [2]:arrary element,val:0-5\n");
                        printf("NO.0A:Zero drift correction\n     [1]:high   [2]:low         mV\n");
                        printf("NO.0B:Modify Address\n");
                        break;
                case 1:                                                                        //使能升压电源
                        if(rx3_dat[1])
                        {
                                pwr_able(1);
                                printf("XE6008 Enable\n");
                        }
                        else
                        {
                                pwr_able(0);
                                printf("XE6008 Disable\n");
                        }
                        break;
                case 2:                                                                        //控制 电源方向切换继电器
                        if(rx3_dat[1])
                        {
                                RELAY4_ON;
                                printf("Relay close\n");
                        }
                        else
                        {
                                RELAY4_OFF;
                                printf("Relay cut down\n");
                        }
                        break;
                case 3:                                                                        //计算 AD 电压
                        printf("V = %d.%03d v\n",current_val / 1000,current_val % 1000);
                        break;
                case 4:                                                                        //开启 关闭过零检测中断
                        if(rx3_dat[1])
                        {
                                if(rx3_dat[1] < 4)
                                {
                                        printf("Now open the exti[%d] interrupt!\n",rx3_dat[1]);
                                        zero_chk_enable(rx3_dat[1]);
                                }
                                else printf("rx3_dat[1] only be 1, 2, 3\n");
                        }else{
                                printf("Now close the exti interrupt!\n");
                                zero_chk_disable();
                        }
                        break;
                case 5:                                                                        //计算继电器动作时间
                        Get_Relay_Action_Time();
                        printf("action time:%d,%d,%d,%d,%d,%d\n",relay_action_time[0],relay_action_time[1],relay_action_time[2],relay_action_time[3],relay_action_time[4],relay_action_time[5]);
                        printf("act_flag = %x\n",ifcalc_relay_action_t_flag);
                        printf("Now restart!\n");
                        delay_ms(50);
                        NVIC_SystemReset();
                        break;
                case 6:                        //切除三相继电器
                        printf("Cut off all relay!\n");
                        cutoff_all();
                        break;       
                case 7:                        //模拟串口1接收数据
                        usart1_flag = sizeof(simulate_uart1_A);
                        switch(rx3_dat[1])
                        {
                                case 1:
                                        for(i=0;i<usart1_flag;i++)
                                        {
                                                rx1_dat = simulate_uart1_A;
                                        }
                                        break;
                                case 2:
                                        for(i=0;i<usart1_flag;i++)
                                        {
                                                rx1_dat = simulate_uart1_B;
                                        }
                                        break;
                                case 3:
                                        for(i=0;i<usart1_flag;i++)
                                        {
                                                rx1_dat = simulate_uart1_C;
                                        }
                                        break;
                        }
//                        printf("usart1_flag = %d, OK!\n",usart1_flag);
                        break;
                case 8:                                //查询继电器动作时间
                        printf("action time: %d,%d,%d,%d,%d,%d\n",relay_action_time[0],relay_action_time[1],relay_action_time[2],relay_action_time[3],relay_action_time[4],relay_action_time[5]);
                        printf("wait time  : %d,%d,%d,%d,%d,%d\n",relay_preaction_time[0],relay_preaction_time[1],relay_preaction_time[2],relay_preaction_time[3],relay_preaction_time[4],relay_preaction_time[5]);
                        break;
                case 9:                //微调继电器动作等待时间
                        if(rx3_dat[1] == 1)//加
                        {
                                relay_preaction_time[rx3_dat[2]] ++;
                                if(relay_preaction_time[rx3_dat[2]] > 9)relay_preaction_time[rx3_dat[2]] = 9;
                        }
                        else if(rx3_dat[1] == 2)//减
                        {
                                if(relay_preaction_time[rx3_dat[2]] > 0)relay_preaction_time[rx3_dat[2]]--;
                        }
                        printf("Now %c %s = %d\n",show_buf1[rx3_dat[2] / 2],show_buf2[rx3_dat[2] % 2],relay_preaction_time[rx3_dat[2]]);
                        break;
                case 0x0a:        //零漂校正电压,单位:mV
                        zero_drift = rx3_dat[1];
                        zero_drift <<= 8;
                        zero_drift |= rx3_dat[2];
                        Test_Write(ZERO_ADD,zero_drift);
                        printf("Now the zero drift is: %03d\n",zero_drift);
                        break;
                case 0x0b://修改地址
                        myadd = rx3_dat[1];
                        Test_Write(ADDR_SAVE_ADD,(u16)myadd);
                        printf("My new addr: %d\n",myadd);
                        break;
                case 0x0c://查询地址
                        printf("My addr: %d\n",myadd);
                        break;
               
               
               
               
                case 0xa0:                        //使能电源
                        pwr_able(1);
                        printf("XE6008 Enable\n");
                        printf("If not sent cmd_a1,cmd_a3 only allow: 01 03 05 cross,no input other parameter!!\n");
                        cpu_relay_state = 0;
                        break;
                case 0xa1:                //切换继电器
                        if(rx3_dat[1])
                        {
                                RELAY4_ON;
                                printf("Relay Ready!\n");
                                printf("Now cmd_a3 only allow: 00 02 04 cross,no input other parameter!!\n");//切出
                                cpu_relay_state = 1;
                        }else {
                                RELAY4_OFF;
                                printf("Now cmd_a3 only allow: 01 03 05 cross,no input other parameter!!\n");//投入
                                cpu_relay_state = 0;
                        }
                        break;
                case 0xa2:        //使能、除能译码器
                        check_io_int_init();                                //----------------------------------------------此处打开中断了,注意解决问题后删掉此句
                        if(rx3_dat[1])
                        {
                                ENABLE_74HC238;
                                printf("enable 74hc238\n");
                        } else{
                                DISABLE_74HC238;
                                printf("disable 74hc238\n");
                        }
                        break;
                case 0xa3:        //发送信号到译码器
                        printf("cpu_relay_state = %d\n",cpu_relay_state);
                        if(cpu_relay_state)
                        {
                                if(rx3_dat[1] != 0 && rx3_dat[1] != 2 && rx3_dat[1] != 4)
                                {
                                        printf("Parameter Error!Only allow input : 00 02 04\n");
                                        return;
                                }
                        }else {
                                if(rx3_dat[1] != 1 && rx3_dat[1] != 3 && rx3_dat[1] != 5)
                                {
                                        printf("Parameter Error!Only allow input : 01 03 05\n");
                                        return;
                                }
                        }
                        send2decoder(rx3_dat[1] & 0x7);
                        printf("Send msg to decode:0x%02x\n",rx3_dat[1] & 0x7);
                        break;
                default:
                        break;
        }
}[/mw_shl_code]
我有故事,你有酒吗
回复

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2018-3-21 15:15:09 | 显示全部楼层
这样的程序只能用来做教学用,实际项目谁又会这么干呢
一分耕耘一分收获。
回复

使用道具 举报

69

主题

978

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2015-4-26
在线时间
765 小时
发表于 2018-3-22 16:48:15 | 显示全部楼层
[mw_shl_code=applescript,true]int main(void)
{
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
        AFIO -> MAPR |= (0X2 << 24);//关JTAG
       
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
        DataInit();
        delay_init();
        TIM3_Int_Init(10,7199);//10Khz的计数频率 配置进入一次1ms
        usart1_Init();
        usart3_Init();
        LED_Init();
        Debug_init();
        ADCCH1_Init();
        pwr_io_init();                        //电源芯片使能引脚初始化
        relay_io_init();                //继电器控制引脚初始化
        check_io_init();                //继电器复制节点引脚初始化
        zero_io_init();                        //过零检测引脚初始化
       
       
        //上电调整三相继电器接到A相
//        delay_ms(200);
//        cutoff_all();                                //切除三相继电器
//        Set2A();                                                //调整到A相
//        current_phase = 1;        //标记当前相为 A 相
        PhaseInit();
       
       
        booting();
        IWDG_Init(4,4*625);//溢出时间4s
        for(;;)
        {
                if(task_t.led_time >= 1000)
                {
                        task_t.led_time = 0;
                        Led_Task();
                }
               
                if(task_t.adc_time >= 1000)
                {
                        task_t.adc_time = 0;
                        Ad_Task();
                }
               
                if(task_t.wdt_time >= 200)
                {
                        task_t.wdt_time = 0;
                        Wdt_Task();
                }
               
                if(task_t.check_time >= 400)
                {
                        task_t.check_time = 0;
                        Check_Task();
                }
               
                if(usart1_flag)
                {
                        Uart1_Task();
                        usart1_flag = 0;
                }
               
                if(usart3_flag)
                {
                        Uart3_Task();
                        usart3_flag = 0;
                }
        }
}[/mw_shl_code]
我有故事,你有酒吗
回复

使用道具 举报

6

主题

315

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1669
金钱
1669
注册时间
2018-1-29
在线时间
160 小时
发表于 2018-3-22 19:53:42 | 显示全部楼层
来俩不甜的 发表于 2018-3-22 16:44
[mw_shl_code=applescript,true]static void Uart3_Task(void)
{
        static u8 cpu_relay_state = 0;

有用的例子,感谢分享!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 02:37

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表