#include "cmsis_os.h"
#include "main.h"
uint8_t stepfata[][4]={
{1,0,0,1},
{0,0,0,1},
{0,0,1,1},
{0,0,1,0},
{0,1,1,0},
{0,1,0,0},
{1,1,0,0},
{1,0,0,0},
{1,0,0,0},
{0,0,0,0}
};
/*
uint8_t stepfata[][4]={
{1,1,0,0},
{0,1,0,0},
{0,1,1,0},
{0,0,1,0},
{0,0,1,1},
{0,0,0,1},
{1,0,0,1},
{1,0,0,0},
};
*/
#define A1 HAL_GPIO_WritePin(PRN_AP_GPIO_Port,PRN_AP_Pin,GPIO_PIN_SET)
#define A0 HAL_GPIO_WritePin(PRN_AP_GPIO_Port,PRN_AP_Pin,GPIO_PIN_RESET)
#define B1 HAL_GPIO_WritePin(PRN_BP_GPIO_Port,PRN_BP_Pin,GPIO_PIN_SET)
#define B0 HAL_GPIO_WritePin(PRN_BP_GPIO_Port,PRN_BP_Pin,GPIO_PIN_RESET)
#define A_1 HAL_GPIO_WritePin(PRN_AM_GPIO_Port,PRN_AM_Pin,GPIO_PIN_SET)
#define A_0 HAL_GPIO_WritePin(PRN_AM_GPIO_Port,PRN_AM_Pin,GPIO_PIN_RESET)
#define B_1 HAL_GPIO_WritePin(PRN_BM_GPIO_Port,PRN_BM_Pin,GPIO_PIN_SET)
#define B_0 HAL_GPIO_WritePin(PRN_BM_GPIO_Port,PRN_BM_Pin,GPIO_PIN_RESET)
#define stepMotorDisable() HAL_GPIO_WritePin(MT_SLEEP_GPIO_Port, MT_SLEEP_Pin, GPIO_PIN_RESET)
#define stepMotorEnable() HAL_GPIO_WritePin(MT_SLEEP_GPIO_Port, MT_SLEEP_Pin, GPIO_PIN_SET)
void setpmotor_Rotateonestep()
{
int i;
//taskENTER_CRITICAL();
for(i=0;i<10;i++){
stepfata[i][0]?A0:A1;
stepfata[i][1]?B0:B1;
stepfata[i][2]?A_0:A_1;
stepfata[i][3]?B_0:B_1;
HAL_Delay(2);
}
//taskEXIT_CRITICAL();
}
void PRN_DI(int i){i?HAL_GPIO_WritePin(PRN_DI_GPIO_Port,PRN_DI_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(PRN_DI_GPIO_Port,PRN_DI_Pin,GPIO_PIN_RESET);}
void PRN_CLK (int i){i?HAL_GPIO_WritePin(PRN_CLK_GPIO_Port,PRN_CLK_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(PRN_CLK_GPIO_Port,PRN_CLK_Pin,GPIO_PIN_RESET);}
void PRN_LAT (int i){i?HAL_GPIO_WritePin(PRN_LAT_GPIO_Port,PRN_LAT_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(PRN_LAT_GPIO_Port,PRN_LAT_Pin,GPIO_PIN_RESET);}
void PRN_STB1 (int i){i?HAL_GPIO_WritePin(PRN_STB1_GPIO_Port,PRN_STB1_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(PRN_STB1_GPIO_Port,PRN_STB1_Pin,GPIO_PIN_RESET);}
void PRN_STB2 (int i){i?HAL_GPIO_WritePin(PRN_STB2_GPIO_Port,PRN_STB2_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(PRN_STB2_GPIO_Port,PRN_STB2_Pin,GPIO_PIN_RESET);}
void PRN_STB3 (int i){i?HAL_GPIO_WritePin(PRN_STB3_GPIO_Port,PRN_STB3_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(PRN_STB3_GPIO_Port,PRN_STB3_Pin,GPIO_PIN_RESET);}
void PRN_STB4 (int i){i?HAL_GPIO_WritePin(PRN_STB4_GPIO_Port,PRN_STB4_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(PRN_STB4_GPIO_Port,PRN_STB4_Pin,GPIO_PIN_RESET);}
void PRN_STB5 (int i){i?HAL_GPIO_WritePin(PRN_STB5_GPIO_Port,PRN_STB5_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(PRN_STB5_GPIO_Port,PRN_STB5_Pin,GPIO_PIN_RESET);}
void PRN_STB6 (int i){i?HAL_GPIO_WritePin(PRN_STB6_GPIO_Port,PRN_STB6_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(PRN_STB6_GPIO_Port,PRN_STB6_Pin,GPIO_PIN_RESET);}
void PRN_EN (int i){i?HAL_GPIO_WritePin(PRN_EN_GPIO_Port,PRN_EN_Pin,GPIO_PIN_SET):HAL_GPIO_WritePin(PRN_EN_GPIO_Port,PRN_EN_Pin,GPIO_PIN_RESET);}
void initPrint(){
stepMotorDisable() ;
PRN_EN(1);
PRN_LAT(1);
PRN_CLK(0);
PRN_STB1(0);
PRN_STB2(0);
PRN_STB3(0);
PRN_STB4(0);
PRN_STB5(0);
PRN_STB6(0);
}
uint8_t paper_err()//0 no paper ;1 paper inside
{
return HAL_GPIO_ReadPin(PRN_PP_DET_GPIO_Port,PRN_PP_DET_Pin);
}
void prndelay()
{
int i;
for(i=0;i<5;i++)
__nop();
}
void prndelay2()
{
static int k;
uint16_t i;
uint16_t j;
for(i=0;i<2000;i++)
for(j=0;j<20;j++)
k++;//__nop();
}
#define PT_TIME 1
int printLine(uint8_t *p){//print a line
int i=0;
if(paper_err()==0) return -1;
PRN_EN(0);
for(i=0;i<384;i++)
{
*(p+i)?PRN_DI(1):PRN_DI(0);
PRN_CLK(0);
prndelay();
PRN_CLK(1); //output a line of dots
prndelay();
PRN_CLK(0);
}
PRN_LAT(1);//latch data
prndelay();
PRN_LAT(0);
prndelay();
PRN_LAT(1);
PRN_STB1(1);
prndelay2();//HAL_Delay(PT_TIME);
PRN_STB1(0);
PRN_STB2(1);
prndelay2();// HAL_Delay(PT_TIME);
PRN_STB2(0);
PRN_STB3(1);
prndelay2();//HAL_Delay(PT_TIME);
PRN_STB3(0);
PRN_STB4(1);
prndelay2();// HAL_Delay(PT_TIME);
PRN_STB4(0);
PRN_STB5(1);
prndelay2();// HAL_Delay(PT_TIME);
PRN_STB5(0);
PRN_STB6(1);
prndelay2();//HAL_Delay(PT_TIME);
PRN_STB6(0);
PRN_EN(1);
stepMotorEnable();
setpmotor_Rotateonestep();
stepMotorDisable();
return 0;
}