STM32F10驱动A4988步进电机驱动模块程序

STM32F10驱动A4988步进电机驱动模块程序,第1张

本人没用过A4988,但你给出的数据有明显错误:

1、VBB(电机电源):最小8V最大35V,你用(VMOT接+5V)5V;(A4988资料上没VMOT这一接口)。

2、ENABLE(使能)端口接+A4988才能工作,你给它0V即是叫它休息不必工作。

以上

根据你的描述,结合自己的猜想,应该是或者线插错了,或者驱动程序没有安装好。现在多数开发板,提供了连个USB接口。其中一个是通过USB转串口,通过串口来下载程序的,这个就是你应该插对的;而另外一个专门是用来使用和电脑进行海量数据传送的。很有可能是你的USB线差错位置了。当然你下载程序的时候,BOOT0和BOOT要的两个跳线帽要设置对。

我有51的程序,可供参考。

#include "lcd12864h"

#include "zikuh"

#include <stringh>

static void delay(uint j) //延时

{

uchar i;

for(; j!=0; j--)

for(i=0; i<100; i++);

}

void busy(void)

{

uchar i;

for(i=0;i<50;i++)

_nop_();

}

void wdata(uchar wdata)

{

busy(); //忙提示

LCD_RW=0;

LCD_DI=1;

P0=wdata;

LCD_EN=0;

LCD_EN=1;

LCD_EN=0;

}

void wcode(uchar wcode)

{

busy();

LCD_RW=0;

LCD_DI=0;

P0=wcode;

LCD_EN=0;

LCD_EN=1;

LCD_EN=0;

}

void subinit()

{

delay(10);

wcode(0xc0);//设置显示初始行

}

//设置显示位置

void setxy(uchar x,uchar y)

{

if ((y>=0)&(y<=63))

{

LCD_CSA=0;

LCD_CSB=1;

}

else //if (y<=127)

{

LCD_CSA=1;

LCD_CSB=0;

}

wcode(0x40|(y%64));

wcode(0xb8|x);

P0=0xff;

}

void wdram(uchar x,uchar y,uchar dd)

{

setxy(x,y);

wdata(dd);

P0=0xff;

LCD_CSA=1;

LCD_CSB=1;

}

//复位

void Lcd_RST(void)

{

//rst=0;

LCD_REST=0;

delay(50);

LCD_REST=1;

Lcd_Clear(0,7,0,128);

wcode(0x3f);//开显示

}

//LCD初始化

void Lcd_Init(void)

{

LCD_POR=0;

Lcd_RST();

LCD_CSA=0;

LCD_CSB=1;

wcode(0x3e);subinit();

LCD_CSA=1;

LCD_CSB=0;

wcode(0x3e);subinit();

Lcd_Clear(0,7,0,128);

LCD_CSA=0;

LCD_CSB=1;

wcode(0x3f);//开显示

LCD_CSA=1;

LCD_CSB=0;

wcode(0x3f);//开显示

}

void Lcd_On(void)

{

LCD_CSA=0;

LCD_CSB=1;

wcode(0x3f);//开显示

LCD_CSA=1;

LCD_CSB=0;

wcode(0x3f);//开显示

}

//LCD 清显示屏

void Lcd_Clear(uchar StartLine,uchar StopLine,uchar StartRow,uchar StopRow)

{

uchar x,y;

for(x=StartLine; x<StopLine+1; x++)

{

for(y=StartRow; y<StopRow; y++)

{

wdram(x,y,0);

}

}

}

//显示一个汉字

void Lcd_DispOneChar(uchar x,uchar y,uchar hz,uchar disp_mode,uchar Width)

{

uchar i;

for(i=0; i<Width; i++)

{

if(disp_mode==WHITE)

{

wdram(x,y+i,(hz+i));

wdram(x+1,y+i,(hz+Width+i));

}

else

{

wdram(x,y+i,0xff-(hz+i));

wdram(x+1,y+i,0xff-(hz+Width+i));

}

}

if(Width==12)

{

for(i=12; i<14; i++)

{

if(disp_mode==WHITE)

{

wdram(x,y+i,0);

wdram(x+1,y+i,0);

}

else

{

wdram(x,y+i,0xff);

wdram(x+1,y+i,0xff);

}

}

for(i=1; i<4; i++)

{

if(disp_mode==WHITE)

{

wdram(x,y-i,0);

wdram(x+1,y-i,0);

}

else

{

wdram(x,y-i,0xff);

wdram(x+1,y-i,0xff);

}

}

}

}

void Lcd_Disp_String(uchar x,uchar y,char pString,uchar disp_mode)

{

uchar i,j;

uchar LineDispCode[16];

//strlen(),为字符串长度测量。

memset(LineDispCode,0,16); //清零数组

strcpy(LineDispCode,pString); //字符串之间的相互复制。

for(i=0; i<strlen(pString); i++)

{

LineDispCode[i]=(pString+i);

}

i=0;

while(LineDispCode[i]!=0)

{

if(LineDispCode[i]>=0xA0)

{

//显示的是汉字

for(j=0; j<ZIMO_NUM; j++)

{

if(GB_12[j]Index[0]==LineDispCode[i] &&

GB_12[j]Index[1]==LineDispCode[i+1])

{

//显示的是汉字

Lcd_DispOneChar(x,y,GB_12[j]Msk,disp_mode,12);

y+=16;

break;

}

}

i+=2;

}

else

{

//显示的是ASCII编码

for(j=0; j<ASC_NUM; j++)

{

if(ASC_12[j]Index==LineDispCode[i])

{

//显示的是汉字

Lcd_DispOneChar(x,y,ASC_12[j]Msk,disp_mode,8);

y+=8;

break;

}

}

i++;

}

if(i>=16)

{

break;

}

}

}

//显示数字

void Lcd_Disp_OneNum(uchar x,uchar y,uchar num,uchar disp_mode)

{

switch(num)

{

case 0:{Lcd_Disp_String(x,y,"0",disp_mode);}break;

case 1:{Lcd_Disp_String(x,y,"1",disp_mode);}break;

case 2:{Lcd_Disp_String(x,y,"2",disp_mode);}break;

case 3:{Lcd_Disp_String(x,y,"3",disp_mode);}break;

case 4:{Lcd_Disp_String(x,y,"4",disp_mode);}break;

case 5:{Lcd_Disp_String(x,y,"5",disp_mode);}break;

case 6:{Lcd_Disp_String(x,y,"6",disp_mode);}break;

case 7:{Lcd_Disp_String(x,y,"7",disp_mode);}break;

case 8:{Lcd_Disp_String(x,y,"8",disp_mode);}break;

case 9:{Lcd_Disp_String(x,y,"9",disp_mode);}break;

default: break;

}

}

//显示二位数。

void Disp_2num(uchar x,uchar y,uchar num,uchar disp_mode)

{

uchar ch[2];

ch[0]=num%10;

ch[1]=num/10;

Lcd_Disp_OneNum(x,y,ch[1],disp_mode);

Lcd_Disp_OneNum(x,y+8,ch[0],disp_mode);

}

//

//显示三位数。

void Disp_3num(uchar x,uchar y,uint num,uchar disp_mode)

{

uchar ch[2];

ch[0]=num/100;

ch[1]=num%100;

if(ch[0])

Lcd_Disp_OneNum(x,y, ch[0],disp_mode);

else

Lcd_Disp_String(x,y," ",disp_mode);

Disp_2num(x,y+8, ch[1],disp_mode);

}

//

//显示四位数。

void Disp_4num(uchar x,uchar y,uint num,uchar disp_mode)

{

uchar ch[4],tmp;

tmp=num/100;

ch[0]=tmp/10;

ch[1]=tmp%10;

tmp=num%100;

ch[2]=tmp/10;

ch[3]=tmp%10;

Lcd_Disp_OneNum(x,y,ch[0],disp_mode);

Lcd_Disp_OneNum(x,y+8,ch[1],disp_mode);

Lcd_Disp_OneNum(x,y+16,ch[2],disp_mode);

Lcd_Disp_OneNum(x,y+24,ch[3],disp_mode);

}

void Lcd_DispIco2(uchar x,uchar y,uchar pIco)//显示老肯图标

{

uchar i,j;

for(i=0; i<4; i++)

{

for(j=0; j<32; j++)

{

wdram(x+i,y+j,pIco);

pIco++;

}

}

}

//

//显示多位数。 disp_mode&0x10==1时,进行即每位都显示,否则大于0的位置不显示。

void Disp_NumGB16(uchar x,uchar y,ulong Data,uchar num,uchar disp_mode)

{

uchar idata ch=0,i,tmp;

for(i=0;i<num;i++)

{

tmp=Data%10;

Data/=10;

if((disp_mode&0x10)||tmp>0||Data>0||num<=2)

Lcd_Disp_OneNum(x,y+(num-i-1)8,tmp,disp_mode%10);

else

Lcd_Disp_String(x,y+(num-i-1)8," ",disp_mode%10);

}

}

这种控制器不适合MCU接口控制,最好另外找一款。如果实在要用这一款的话,你的接口电路需要专门设计一下。接口部分是10伏供电和控制的,而MCU端出来的信号不可能到10伏的,需要进行电平变换。控制器的调速是提供一个0~10伏的电压来调速的,所以MCU端需要DAC输出一个可调电压,然后通过运放调整到最大10伏输出才行。

概述

HT16C22/HT16C22G 是一款存储器映射和多功能 LCD 控制 / 驱动芯片。该系列芯片显示模式有 176 点 (44×4)。HT16C22/HT16C22G 软件配置特性使 得它适用于多种 LCD 应用,包括 LCD 模块和显 示子系统。HT16C22/HT16C22G 通过双线双向 I2C 接口与大多数微处理器 / 微控制器进行通信。

特性

工作电压:24V ~ 55V

内部 32kHz RC 振荡器

Bias:1/2 或 1/3;Duty:1/4

带电压跟随器的内部 LCD 偏置发生器

I2C接口

两个可选 LCD 帧频率:80Hz 或 160Hz

多达 44×4 位 RAM 用来存储显示数据

最大显示模式 44×4:44 SEGs 和 4 COMs

多种闪烁模式

读 / 写地址自动增加

内建 16 级 VLCD 电压调整电路

低功耗

提供 VLCD 引脚来调整 LCD 工作电压

采用硅栅极 CMOS 制造工艺

封装类型:48LQFP,52QFP,chip 和 COG

具体看:>

以上就是关于STM32F10驱动A4988步进电机驱动模块程序全部的内容,包括:STM32F10驱动A4988步进电机驱动模块程序、stm32开发版安装usb驱动安装,但是下载线连接电脑后不能显示端口、stm32并口驱动12864,求大神看看我的程序错在哪了编译通过但是屏幕上没显示~搞了两天了,头疼死我了、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9278747.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存