本帖最后由 21ic小管家 于 2017-10-27 14:39 编辑
MCU:STM8S00F3
产生PWM的芯片:MBI5043
下面是驱动代码:
void send_one_data(unsigned char c_ch,unsigned int i_data)
{
unsigned char i;
for(i=0;i<15;i++)
{
if(i_data&0x8000)
{
SDI_ON();//输出1bit 1
}
else
{
SDI_OFF();//输出1bit 0
}
CLK_ONOFF();
i_data=i_data<<1;
}
if(c_ch==0)
LE1_ON();
else
LE2_ON();
if(i_data&0x8000)
{
SDI_ON();//输出1bit 1
}
else
{
SDI_OFF();//输出1bit 0
}
CLK_ONOFF();
if(c_ch==0)
LE1_OFF();
else
LE2_OFF();
}
/******************************************************************************
功能说明: 整体锁栓
输入参数: 无
输出参数: 无
返回值: 无
******************************************************************************/
void lock_data(void)
{
unsigned char i;
for(i=0;i<13;i++)
{
SDI_OFF();//输出1bit 0
CLK_ONOFF();
}
TIM1_CR1 &= ~(0x01);
LE1_ON();
LE2_ON();
for(i=13;i<16;i++)
{
SDI_OFF();//输出1bit 0
CLK_ONOFF();
}
LE1_OFF();
LE2_OFF();
_asm("nop");
_asm("nop");
TIM1_CR1 |= 0x01;
}
下面是测试代码:
void main()
{
unsigned char i = 0;
MBI5043init();
while(1)
{
for(i=0;i<16;i++)
{
send_one_data(1,32768);//50%的占空比
}
lock_data();
}
}
按以上的方式测试,输出会抖动
void main()
{
unsigned char i = 0;
MBI5043init();
for(i=0;i<16;i++)
{
send_one_data(1,32768);//50%的占空比
}
lock_data();
while(1)
{
}
}
这样输出就不会抖动,所以问题是出在驱动代码中,求大神指教
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
关于楼主的抖动问题,确实是软件的原因。第一种方式,会重复像IC写入数据。也就是说会一直刷新数据。所以有抖动。第二种方式不会,因为只写了一次数据。后面的就循环在WHILE(1)里面了。 MBI5043init();楼主能发下这个的内容吗?MBI5043需不需要初始化?
一周热门 更多>