OpenEdv-开源电子网

标题: 请问各位前辈LPC这段移植到STM里该怎么写 [打印本页]

作者: rcfans    时间: 2019-5-2 13:28
标题: 请问各位前辈LPC这段移植到STM里该怎么写

搞了一个多星期没办法,只能来求助下各位前辈,LPC1768 => STM32F103VET6
[mw_shl_code=c,true]
fx  = 0;
P = 0;
mc = 1;
LPC_GPIO0->FIODIR = fx;
LPC_GPIO0->FIOCLR = fx;
LPC_GPIO2->FIOSET=mc;
LPC_GPIO2->FIODIR=mc+P;
LPC_GPIO2->FIOCLR=mc+P;
[/mw_shl_code]

这几句主要是切换高低电平来产生脉冲驱动步进电机,代码位于Time0定时内,定时器设置为

[mw_shl_code=cpp,true]
void timer0Init (unsigned int fp){
    LPC_TIM0->TCR  = 0x02;
    LPC_TIM0->IR   = 1;
    LPC_TIM0->CTCR = 0;
    LPC_TIM0->TC   = 0;
    LPC_TIM0->R   = 0;
    // SystemFrequency = 4000000
    LPC_TIM0->MR0  =SystemFrequency /(4*fp);
    LPC_TIM0->MCR  = 0x03;
    LPC_TIM0->TCR  = 0x01;                                             
}
[/mw_shl_code]
调用 timer0Init(250000);
默认systeminit ,这个应该是 1us的定时中断时间吗,我在STM32里设置的是1us,刚入门,不太懂LPC的定时器算法,还请前辈指点一下

我的解决办法如下

[mw_shl_code=cpp,true]
GPIOD->BRR        =        0xff;
GPIOD->BSRR        =fx;
GPIOA->BRR        =        0xff;
GPIOA->BSRR        =        mc;
GPIOA->BRR |=        mc+P;
GPIOA->BSRR        =        mc+P;
[/mw_shl_code]

但是实验结果是步进电机堵转,产生卡顿.不明白为什么,还请各位前辈指教



作者: 正点原子    时间: 2019-5-4 01:04
看我们STM32的对应例程,然后再改。
作者: rcfans    时间: 2019-5-4 17:33
正点原子 发表于 2019-5-4 01:04
看我们STM32的对应例程,然后再改。

原子哥,我这个是根据您的虚拟串口例程改的,收数据的时候电机就卡,不收就挺好,这个有啥DMA类的可以解决吗,轮询模式
作者: 正点原子    时间: 2019-5-5 01:40
rcfans 发表于 2019-5-4 17:33
原子哥,我这个是根据您的虚拟串口例程改的,收数据的时候电机就卡,不收就挺好,这个有啥DMA类的可以解 ...

你的波特率多高?
很频繁的发数据么?
作者: rcfans    时间: 2019-5-6 01:21
正点原子 发表于 2019-5-5 01:40
你的波特率多高?
很频繁的发数据么?

用的VCP,应该跟波特率没啥关系吧,波特率选的115200,数据基本是100毫秒一条,一发就卡顿,一停就好




欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/) Powered by Discuz! X3.4