這個程序我是用stm32cubemx生成,所有初始化都是按照ST官方樣式編寫
單片機源程序如下:
- /* Includes ------------------------------------------------------------------*/
- #include "global.h"
- /* USER CODE BEGIN Includes */
- /* USER CODE END Includes */
- /* Private variables ---------------------------------------------------------*/
- union{
- uint8_t ACC;
- struct{
- uint8_t h0 :1;
- uint8_t h1 :1;
- uint8_t h2 :1;
- uint8_t h3 :1;
- uint8_t h4 :1;
- uint8_t h5 :1;
- uint8_t h6 :1;
- uint8_t h7 :1;
- }bits;
- }Bytes;
- uint8_t val=0;
- void read(unsigned char hz)
- {
- Bytes.ACC=hz;
- CLK_PutVal(GPIO_PIN_RESET);
- CLK_PutVal(GPIO_PIN_SET);
-
- DI_PutVal((GPIO_PinState)Bytes.bits.h7);
- CLK_PutVal(GPIO_PIN_RESET);
- CLK_PutVal(GPIO_PIN_SET);
-
- DI_PutVal((GPIO_PinState)Bytes.bits.h6);
- CLK_PutVal(GPIO_PIN_RESET);
- CLK_PutVal(GPIO_PIN_SET);
-
- DI_PutVal((GPIO_PinState)Bytes.bits.h5);
- CLK_PutVal(GPIO_PIN_RESET);
- CLK_PutVal(GPIO_PIN_SET);
-
- DI_PutVal((GPIO_PinState)Bytes.bits.h4);
- CLK_PutVal(GPIO_PIN_RESET);
- CLK_PutVal(GPIO_PIN_SET);
-
- DI_PutVal((GPIO_PinState)Bytes.bits.h3);
- CLK_PutVal(GPIO_PIN_RESET);
- CLK_PutVal(GPIO_PIN_SET);
-
- DI_PutVal((GPIO_PinState)Bytes.bits.h2);
- CLK_PutVal(GPIO_PIN_RESET);
- CLK_PutVal(GPIO_PIN_SET);
-
- DI_PutVal((GPIO_PinState)Bytes.bits.h1);
- CLK_PutVal(GPIO_PIN_RESET);
- CLK_PutVal(GPIO_PIN_SET);
- DI_PutVal((GPIO_PinState)Bytes.bits.h0);
- }
- void printf24(u8 *p)
- {
- uint8_t i1=0;
- uint8_t *pp;
- uint8_t k,k2;
- unsigned int k1=0;
- char printhzflag;
- unsigned char what,what1;
-
- char hh;
-
- pp=p;
- while(1)
- {
- p++;
- if(*p==0x0a) p++;
- pp=p;
-
- //缺紙/* ++@zengziwen modiffy@++ */
- while((PHK_GetVal()==0))
- {
- return;
- }
- for(k=0;k<24;k++)
- {
- //OneStep();
- __MotorEnable();
- OneStep();
- __MotorEnable();
- //runmotor(4);
- p=pp;
- //while(*p!=0x0d)
- /* ++@zengziwen modiffy@++ */
- while(*p=='\r')
- {
- p+=1;
- }
- while(*p!='\r')
- {
- what1=what=*p;
- if(what==0x20)
- {
- what=0;
- printhzflag=0;
- }
- else
- {
- if(what==0x03)
- {
- if(*(p-1)==0x0a)
- return;
- }
- //if((what>=0x61)&(what<0x80))
- if((what>=0x61)&&(what<=0x7a)) /* a---->z */
- {
- printhzflag=0;
- //what=what-74+9;
- what=what-65;
- goto print;
- }
- if(what1>=0x80)/* zh */
- {
- what=what-41;
- printhzflag=1;
- goto print;
- }
- if(what1==0x40)
- {
- what1=what1+45;
- printhzflag=1;
- goto print;
- }
- //if((what1>0x40)&(what1<=0x5a))
- if((what1>=0x41)&&(what1<=0x5a)) /* A---->Z */
- {
- what=what-0x41;
- printhzflag=2;
- goto print;
- }
- //if((what1>=0x21)&(what1<=0x3f))
- if((what1>=0x21)&&(what1<=0x3f))
- {
- printhzflag=0;
- what=what-0x20;
- goto print;
- }
- }
-
- print:
-
- switch(printhzflag)
- {
- case 0:
- for(i1=0;i1<2;i1++)
- {
- read(hzk16[what*24+k][i1]);
- spe++;
- }
- break;
- case 1:
- what=what1-109;
- for(i1=0;i1<3;i1++)
- {
- read(hzk24[what*24+k][i1]);
- spe++;
- }
- break;
- case 2:
- for(i1=0;i1<2;i1++)
- {
- //hh = what;
- //hh = A_Z[what*24+k][i1];
- read(A_Z[what*24+k][i1]);
- spe++;
- }
- break;
- }
- p++;
- }
-
- for(i1=0;i1<48-spe;i1++)
- {
- read(0);
- }
-
- spe=0;
- nLAT_PutVal(GPIO_PIN_RESET);
- /* ++@zengziwen modiffy@++ */
- delay_us(10);
- nLAT_PutVal(GPIO_PIN_SET);
- if(HEAT_GetVal(&hadc1)!=0)//太熱
- {
- do{
- STB1_PutVal(GPIO_PIN_RESET);
- STB2_PutVal(GPIO_PIN_RESET);
-
- STB3_PutVal(GPIO_PIN_RESET);
- STB4_PutVal(GPIO_PIN_RESET);
- //STB5_PutVal(GPIO_PIN_RESET);
- //STB6_PutVal(GPIO_PIN_RESET);
- }while((HEAT_GetVal(&hadc1)==0));//
- }
- STB1_PutVal(GPIO_PIN_SET);
- STB2_PutVal(GPIO_PIN_SET);
- STB3_PutVal(GPIO_PIN_SET);
- STB4_PutVal(GPIO_PIN_SET);
- //STB5_PutVal(GPIO_PIN_SET);
- //STB6_PutVal(GPIO_PIN_SET);
- k1++;
-
- //OneStep();
- //runmotor(4);
- __MotorEnable();
- OneStep();
- __MotorEnable();
- //delay_us(400);
- //delay_us(800);
- delay_us(1090);
- k1++;
-
- nLAT_PutVal(GPIO_PIN_RESET);
- STB1_PutVal(GPIO_PIN_RESET);
- STB2_PutVal(GPIO_PIN_RESET);
- STB3_PutVal(GPIO_PIN_RESET);
- STB4_PutVal(GPIO_PIN_RESET);
- //STB5_PutVal(GPIO_PIN_RESET);
- //STB6_PutVal(GPIO_PIN_RESET);
- }
- for(k2=0;k2<16;k2++)
- {
-
- //OneStep();
- //runmotor(4);
- __MotorEnable();
- OneStep();
- __MotorEnable();
- delay_us(400);
- delay_us(800);
- k1++;
- }
- }
- }
- /* USER CODE BEGIN PV */
- /* Private variables ---------------------------------------------------------*/
- /* USER CODE END PV */
- /* Private function prototypes -----------------------------------------------*/
- void SystemClock_Config(void);
- /* USER CODE BEGIN PFP */
- /* Private function prototypes -----------------------------------------------*/
- /* USER CODE END PFP */
- /* USER CODE BEGIN 0 */
- /* USER CODE END 0 */
- int main(void)
- {
- /* USER CODE BEGIN 1 */
- int i;
- /* USER CODE END 1 */
- /* MCU Configuration----------------------------------------------------------*/
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
- /* USER CODE BEGIN Init */
- /* USER CODE END Init */
- /* Configure the system clock */
- SystemClock_Config();
- /* USER CODE BEGIN SysInit */
- /* USER CODE END SysInit */
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- USART1_Init(&huart1);
- ADC1_Init(&hadc1);
- __VPENOFF();
- ThermalHeadInit();
- nLAT_PutVal(0);
- STB1_PutVal(0);//
- STB2_PutVal(0);
- /* USER CODE BEGIN 2 */
- for(i=0;i<48;i++)
- read(0);
- print_flag = 0;
- if(PHK_GetVal()==1)
- {
- paper_flag = 1;
- runmotor(200);
- }
- else
- {
- paper_flag = 0;
- }
- /* USER CODE END 2 */
-
- while(1)
- {
- //val = PHK_GetVal();
- printf24(p);
- }
- /* USER CODE BEGIN WHILE */
- while(1)
- {
- switch(print_flag)
- {
- case 0:
- nLAT_PutVal(0);
- STB1_PutVal(0);//
- STB2_PutVal(0);
- if(PHK_GetVal()==0)
- {
- if(paper_flag == 0)
- {
- runmotor(1000);
- }
- if(PHK_GetVal()==1)
- {
- paper_flag = 1;
- }
- else
- {
- paper_flag = 0;
- }
- }
- else
- {
- paper_flag = 0;
- }
- break;
- case 1://出紙間隙
- print_flag = 0;
- break;
- case 2://打印機狀態(tài)
- print_flag = 0;
- if(PHK_GetVal()==1)
- {
- //flag = UART_SendChar(0xa1);//有紙
- }
- else
- {
- //flag = UART_SendChar(0xa0);
- }
- break;
- case 3://版本號
- #if 0
- print_flag = 0;
- flag = UART_SendChar(2);delay(1000);
- flag = UART_SendChar('V');delay(1000);
- flag = UART_SendChar('E');delay(1000);
- flag = UART_SendChar('R');delay(1000);
- flag = UART_SendChar('2');delay(1000);
- flag = UART_SendChar('.');delay(1000);
- flag = UART_SendChar('0');delay(1000);
- flag = UART_SendChar('1');delay(1000);
- flag = UART_SendChar(0X0D);delay(1000);
- flag = UART_SendChar(0X0A);delay(1000);
- flag = UART_SendChar(3);delay(1000);
- #endif
- break;
- case 4://正常打印
- print_flag = 0;
- printf24(huart1.RxBuff);
- if(PHK_GetVal()==1)//有紙
- {
- for(i=0;i<line_out*17;i++)
- runmotor(2);
- }
- memset(huart1.RxBuff, 0, 2048);
- print_flag = 0;
- break;
- }
- }
- /* USER CODE END 3 */
- }
- /** System Clock Configuration
- */
- void SystemClock_Config(void)
- {
- RCC_OscInitTypeDef RCC_OscInitStruct;
- RCC_ClkInitTypeDef RCC_ClkInitStruct;
- RCC_PeriphCLKInitTypeDef PeriphClkInit;
- /**Initializes the CPU, AHB and APB busses clocks
- */
- RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
- RCC_OscInitStruct.HSEState = RCC_HSE_ON;
- RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
- RCC_OscInitStruct.HSIState = RCC_HSI_ON;
- RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
- RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
- RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
- if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
- /**Initializes the CPU, AHB and APB busses clocks
- */
- RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
- |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
- RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
- RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
- RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
- RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
- if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
- PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
- PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
- if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
- {
- _Error_Handler(__FILE__, __LINE__);
- }
- /**Configure the Systick interrupt time
- */
- HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
- /**Configure the Systick
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
Printer-Demo_v1.3.rar
(11.76 MB, 下載次數: 201)
2018-6-14 10:57 上傳
點擊文件名下載附件
此例程僅作參考
|