完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
TM4C123GH6PM
1、 我在debug模式下调试程序,有的时候没反应 代码就是GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0x00);,这可是2灯还是一直亮(之前的配置都做好了,因为这个灯原来用过很多次了),不知道为什么?是因为ROM区已经满了吗? 2、 请问如果程序正在调试,然后我修改一下程序,重新debug,单片机会立刻执行新的程序吗? 3、 如果要将程序烧录进flash用LM Flash Programmer就可以吗? 4、 利用led灯检验,发现定时器中断中蓝灯LEd2亮了,这样IF_PIT应该就被置为true了,可为什么回到主程序还是没有修改过?还是执行Forward(0); 已经在向量表里注册过了,问题就是led2亮了,说明IF_PIT变为true了,可是主程序中还是false(下面只粘贴与该部分有关的代码)。已经搞了三天了,实在是不知道怎么办了,真的求助啊 //timer and interrupt,和触发端PF4 SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER2); // 启用Timer2模块 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); // 启用PF4作为脉冲触发脚 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); // 启用PB0作为脉冲捕捉脚 GPIOPinTypeGPIOInput(GPIO_PORTB_BASE, GPIO_PIN_0); GPIOPinConfigure(GPIO_PB0_T2CCP0); // 配置GPIO脚为使用Timer0捕捉模式 GPIOPinTypeTimer(GPIO_PORTB_BASE, GPIO_PIN_0); GPIOPadConfigSet(GPIO_PORTB_BASE, GPIO_PIN_0, GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_OD); // 为管脚配置开漏模式 TimerConfigure(TIMER2_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_TIME); // 配置使用Timer0的TimerA模块为边沿触发减计时计数模式 TimerControlEvent(TIMER2_BASE, TIMER_A, TIMER_EVENT_BOTH_EDGES); // 使用边沿触发 TimerLoadSet(TIMER2_BASE, TIMER_A, 0x7d00); //设置计数范围为32000到0,为2ms,最长可以测0.7m,超声测距了 TimerIntRegister(TIMER2_BASE, TIMER_A, Timer2AIntHandler); // 注册中断处理函数以响应触发事件 IntMasterEnable(); // 系统总中断开 TimerIntEnable(TIMER2_BASE, TIMER_CAPA_EVENT); // 时钟中断允许,中断事件为Capture模式中边沿触发 IntEnable(INT_TIMER2A); // NVIC中允许定时器A模块中断 //触发超声模块启动的引脚PF1 SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);//Enable the port GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_4); //配置输出端口PF4 player.is_over = 0; while(player.is_over == 0) [ //UART_READ(); //GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2 | GPIO_PIN_3, 0x00); //GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0xFF); //GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0x00); MeasurePit(); //GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0x00); //SysCtlDelay((unsigned char)(SysCtlClockGet())); //if(IF_PIT)GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0x00); //else GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0x00); //GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0xFF); //Motion(); //BackForth(0); //GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2, 0x00); //Forward(1); if(IF_PIT)BackForth(0); else Forward(0); //else ; GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0x00); SysCtlDelay(SysCtlClockGet()); GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0xFF); SysCtlDelay(SysCtlClockGet()); ] //与超声波传感器的接口 void MeasurePit() [ unsigned char i; SENSORChangable = true; TimerEnable(TIMER2_BASE, TIMER_A); // 启动捕捉模块 for(i = 0; i < 2 && SENSORChangable == true; i++) [ GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_4, 0x10); SysCtlDelay(160/3); //延时10微秒 GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_4, 0x00); SysCtlDelay(SysCtlClockGet() / 3); //延时300ms ] //GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2, 0x00); TimerDisable(TIMER2_BASE, TIMER_A); //关闭捕捉模块 return; ] //注册中断函数 void Timer2AIntHandler() [ if(SENSORChangable == false) [ TimerIntClear(TIMER2_BASE, TimerIntStatus(TIMER2_BASE, TIMER_CAPA_EVENT)); return; ] if(GPIOPinRead(GPIO_PORTB_BASE, GPIO_PIN_0)) [ //GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0x00); RiseTime = TimerValueGet(TIMER2_BASE, TIMER_A); ] else [ //GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, 0x); uint32_t time = TimerValueGet(TIMER2_BASE, TIMER_A) > RiseTime ? RiseTime + 32000 - TimerValueGet(TIMER2_BASE, TIMER_A) : RiseTime - TimerValueGet(TIMER2_BASE, TIMER_A); if(time * 34 < 160000) [ IF_PIT = false; GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0x00); ] else [ IF_PIT = true; GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0xFF); ] SENSORChangable = false; ] //GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2 | GPIO_PIN_1, 0xFF); TimerIntClear(TIMER2_BASE, TimerIntStatus(TIMER2_BASE, TIMER_CAPA_EVENT)); //清除中断 ] |
|
相关推荐
10 个讨论
|
|
Evawang 发表于 2020-4-7 17:11 请问debug是把程序烧写到什么区了?是RAM吗?那怎么烧写到Flash里呢? 还有一个问题 SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ); //配置时钟 请问定时器捕捉边沿模式时, 从preload到TimerValueGet(TIMER2_BASE, TIMER_A)经历的时间是(preload - TimerValueGet(TIMER2_BASE, TIMER_A))/ SysCtlClockGet() 秒 吗 |
|
|
|
|
|
|
|
Evawang 发表于 2020-4-7 17:11 sorry还有一个问题麻烦您 下面是一个控制电机转动的函数,为什么我修改里面的占空比,可是电机的速度完全没有变化,一直特别快? void BackForth(unsigned char speed) //BACKFORTH speed = 0 1 对应着10% 和 25%的速度 [ unsigned char duty_cycle1 = (speed == 0) ? PWMGenPeriodGet(PWM0_BASE, PWM_OUT_1) / 10 : PWMGenPeriodGet(PWM0_BASE, PWM_OUT_1) / 4; unsigned char duty_cycle2 = (speed == 0) ? PWMGenPeriodGet(PWM0_BASE, PWM_OUT_2) / 10 : PWMGenPeriodGet(PWM0_BASE, PWM_OUT_2) / 4; GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_2|GPIO_PIN_3, 0xFF);//电源开关端置高电平,使得能转 PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0, 0); //PWMGenPeriodGet(PWM0_BASE, PWM_OUT_0)); // Set PWM0 to a duty cycle of 0. PWMPulseWidthSet(PWM0_BASE, PWM_OUT_1, duty_cycle1); //PWMGenPeriodGet(PWM0_BASE, PWM_OUT_1)); // Set PWM1 to a duty cycle . PWMPulseWidthSet(PWM0_BASE, PWM_OUT_2, duty_cycle2); //PWMGenPeriodGet(PWM0_BASE, PWM_OUT_2)); // Set PWM0 to a duty cycle. PWMPulseWidthSet(PWM0_BASE, PWM_OUT_3, 0); //PWMGenPeriodGet(PWM0_BASE, PWM_OUT_3)); // Set PWM0 to a duty cycle of 0. PWMOutputState(PWM0_BASE, PWM_OUT_0_BIT, true);// Enable the PWM0 Bit0 (PD0) output signal. PWMOutputState(PWM0_BASE, PWM_OUT_1_BIT, true); PWMOutputState(PWM0_BASE, PWM_OUT_2_BIT, true); PWMOutputState(PWM0_BASE, PWM_OUT_3_BIT, true); PWMGenEnable(PWM0_BASE, PWM_GEN_0); // Enable the PWM generator block. PWMOutputInvert(PWM0_BASE, PWM_OUT_0_BIT, false); PWMOutputInvert(PWM0_BASE, PWM_OUT_1_BIT, true); PWMOutputInvert(PWM0_BASE, PWM_OUT_2_BIT, true); PWMOutputInvert(PWM0_BASE, PWM_OUT_3_BIT, false); //小车1 2 反转 ] |
|
|
|
|
|
|
|
Evawang 发表于 2020-4-7 17:11 请问CCS debug模式是把程序烧到什么区了?RAM吗? 如果要烧写到Flash怎么弄?实在不想让让程序断电后就没了啊 还有一个问题就是 在定时器捕捉边沿模式下 从preload到TimerValueGet(TIMER2_BASE, TIMER_A) 经过的时间是(preload - TimerValueGet(TIMER2_BASE, TIMER_A))/ SysCtlClockGet() 秒吗 |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
594 浏览 0 评论
1647 浏览 0 评论
2089 浏览 0 评论
为啥BQ7693003DBTR芯片在和BQ769X0盒子通讯时收不到信号?
1538 浏览 0 评论
DSP 28027F 开发板 XDS100v2调试探针诊断日志显示了 Error -150 (SC_ERR_FTDI_FAIL)如何解决
1381 浏览 0 评论
AT32F407在USART2 DMA发送数据时,接包接到了要发送的数据,程序还是处于等待传输完成的标识判断中,为什么?
1792浏览 29评论
2820浏览 23评论
请问下tpa3220实际测试引脚功能和官方资料不符,哪位大佬可以帮忙解答下
1748浏览 20评论
请教下关于TAS5825PEVM评估模块原理图中不太明白的地方,寻求答疑
1666浏览 14评论
两个TMP117传感器一个可以正常读取温度值,一个读取的值一直是0,为什么?
1679浏览 13评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-13 08:45 , Processed in 1.156588 second(s), Total 64, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
132179