This commit is contained in:
2025-05-13 04:55:13 +03:00
parent 3f693566bd
commit ceb6d0ccec
4364 changed files with 2897163 additions and 0 deletions
@@ -0,0 +1,481 @@
/*********************************************************************************************************
*
* File : TouchPanel.c
* Hardware Environment:
* Build Environment : RealView MDK-ARM Version: 4.20
* Version : V1.0
* By :
*
* (c) Copyright 2005-2011, WaveShare
* http://www.waveshare.net
* All Rights Reserved
*
*********************************************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "TouchPanel/TouchPanel.h"
#include "TouchPanel/config.h"
#include "GLCD/GLCD.h"
/* Private variables ---------------------------------------------------------*/
Matrix matrix ;
Coordinate display ;
Coordinate ScreenSample[3];
Coordinate DisplaySample[3] = {
{ 30, 45 },
{ 250, 70},
{ 160,210}
};
/* Private define ------------------------------------------------------------*/
#define THRESHOLD 2
/*******************************************************************************
* Function Name : ADS7843_SPI_Init
* Description :
* Input : None
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
static void ADS7843_SPI_Init(void)
{
SPI_InitTypeDef SPI_InitStruct;
RCC_APB1PeriphClockCmd(Open_RCC_SPI,ENABLE);
SPI_I2S_DeInit(Open_SPI);
/* Open_SPI Config -------------------------------------------------------------*/
SPI_InitStruct.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStruct.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStruct.SPI_NSS = SPI_NSS_Soft;
SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStruct.SPI_CRCPolynomial = 7;
SPI_Init(Open_SPI, &SPI_InitStruct);
SPI_Cmd(Open_SPI, ENABLE);
}
/*******************************************************************************
* Function Name : TP_Init
* Description :
* Input : None
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void TP_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(Open_SPI_SCK_GPIO_CLK | Open_SPI_MISO_GPIO_CLK | Open_SPI_MOSI_GPIO_CLK,ENABLE);
RCC_AHB1PeriphClockCmd(Open_TP_CS_CLK | Open_TP_IRQ_CLK,ENABLE);
Open_SPI_CLK_INIT(Open_RCC_SPI,ENABLE);
GPIO_PinAFConfig(Open_SPI_SCK_GPIO_PORT, Open_SPI_SCK_SOURCE, Open_GPIO_AF_SPI);
GPIO_PinAFConfig(Open_SPI_MISO_GPIO_PORT, Open_SPI_MISO_SOURCE, Open_GPIO_AF_SPI);
GPIO_PinAFConfig(Open_SPI_MOSI_GPIO_PORT, Open_SPI_MOSI_SOURCE, Open_GPIO_AF_SPI);
GPIO_InitStructure.GPIO_Pin = Open_SPI_SCK_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(Open_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Open_SPI_MISO_PIN;
GPIO_Init(Open_SPI_MISO_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = Open_SPI_MOSI_PIN;
GPIO_Init(Open_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
/* TP_CS */
GPIO_InitStructure.GPIO_Pin = Open_TP_CS_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(Open_TP_CS_PORT, &GPIO_InitStructure);
/*TP_IRQ */
GPIO_InitStructure.GPIO_Pin = Open_TP_IRQ_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN ;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(Open_TP_IRQ_PORT, &GPIO_InitStructure);
TP_CS(1);
ADS7843_SPI_Init();
}
/*******************************************************************************
* Function Name : DelayUS
* Description :
* Input : - cnt:
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
static void DelayUS(vu32 cnt)
{
uint16_t i;
for(i = 0;i<cnt;i++)
{
uint8_t us = 12;
while (us--)
{
;
}
}
}
/*******************************************************************************
* Function Name : WR_CMD
* Description :
* Input : - cmd:
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
static void WR_CMD (uint8_t cmd)
{
/* Wait for SPI3 Tx buffer empty */
while (SPI_I2S_GetFlagStatus(Open_SPI, SPI_I2S_FLAG_TXE) == RESET);
/* Send SPI3 data */
SPI_I2S_SendData(Open_SPI,cmd);
/* Wait for SPI3 data reception */
while (SPI_I2S_GetFlagStatus(Open_SPI, SPI_I2S_FLAG_RXNE) == RESET);
/* Read Open_SPI received data */
SPI_I2S_ReceiveData(Open_SPI);
}
/*******************************************************************************
* Function Name : RD_AD
* Description :
* Input : None
* Output : None
* Return :
* Attention : None
*******************************************************************************/
static int RD_AD(void)
{
unsigned short buf,temp;
/* Wait for Open_SPI Tx buffer empty */
while (SPI_I2S_GetFlagStatus(Open_SPI, SPI_I2S_FLAG_TXE) == RESET);
/* Send Open_SPI data */
SPI_I2S_SendData(Open_SPI,0x0000);
/* Wait for SPI3 data reception */
while (SPI_I2S_GetFlagStatus(Open_SPI, SPI_I2S_FLAG_RXNE) == RESET);
/* Read Open_SPI received data */
temp=SPI_I2S_ReceiveData(Open_SPI);
buf=temp<<8;
DelayUS(1);
while (SPI_I2S_GetFlagStatus(Open_SPI, SPI_I2S_FLAG_TXE) == RESET);
/* Send Open_SPI data */
SPI_I2S_SendData(Open_SPI,0x0000);
/* Wait for Open_SPI data reception */
while (SPI_I2S_GetFlagStatus(Open_SPI, SPI_I2S_FLAG_RXNE) == RESET);
/* Read Open_SPI received data */
temp=SPI_I2S_ReceiveData(Open_SPI);
buf |= temp;
buf>>=3;
buf&=0xfff;
return buf;
}
/*******************************************************************************
* Function Name : Read_X
* Description : Read ADS7843 ADC X
* Input : None
* Output : None
* Return :
* Attention : None
*******************************************************************************/
int Read_X(void)
{
int i;
TP_CS(0);
DelayUS(1);
WR_CMD(CHX);
DelayUS(1);
i=RD_AD();
TP_CS(1);
return i;
}
/*******************************************************************************
* Function Name : Read_Y
* Description : Read ADS7843 ADC Y
* Input : None
* Output : None
* Return :
* Attention : None
*******************************************************************************/
int Read_Y(void)
{
int i;
TP_CS(0);
DelayUS(1);
WR_CMD(CHY);
DelayUS(1);
i=RD_AD();
TP_CS(1);
return i;
}
/*******************************************************************************
* Function Name : TP_GetAdXY
* Description : Read ADS7843
* Input : None
* Output : None
* Return :
* Attention : None
*******************************************************************************/
void TP_GetAdXY(int *x,int *y)
{
int adx,ady;
adx=Read_X();
DelayUS(1);
ady=Read_Y();
*x=adx;
*y=ady;
}
/*******************************************************************************
* Function Name : TP_DrawPoint
* Description :
* Input : - Xpos: Row Coordinate
* - Ypos: Line Coordinate
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void TP_DrawPoint(uint16_t Xpos,uint16_t Ypos)
{
LCD_SetPoint(Xpos,Ypos,Blue); /* Center point */
LCD_SetPoint(Xpos+1,Ypos,Blue);
LCD_SetPoint(Xpos,Ypos+1,Blue);
LCD_SetPoint(Xpos+1,Ypos+1,Blue);
}
/*******************************************************************************
* Function Name : DrawCross
* Description :
* Input : - Xpos: Row Coordinate
* - Ypos: Line Coordinate
* Output : None
* Return : None
* Attention : None
*******************************************************************************/
void DrawCross(uint16_t Xpos,uint16_t Ypos)
{
LCD_DrawLine(Xpos-15,Ypos,Xpos-2,Ypos,0xffff);
LCD_DrawLine(Xpos+2,Ypos,Xpos+15,Ypos,0xffff);
LCD_DrawLine(Xpos,Ypos-15,Xpos,Ypos-2,0xffff);
LCD_DrawLine(Xpos,Ypos+2,Xpos,Ypos+15,0xffff);
LCD_DrawLine(Xpos-15,Ypos+15,Xpos-7,Ypos+15,RGB565CONVERT(184,158,131));
LCD_DrawLine(Xpos-15,Ypos+7,Xpos-15,Ypos+15,RGB565CONVERT(184,158,131));
LCD_DrawLine(Xpos-15,Ypos-15,Xpos-7,Ypos-15,RGB565CONVERT(184,158,131));
LCD_DrawLine(Xpos-15,Ypos-7,Xpos-15,Ypos-15,RGB565CONVERT(184,158,131));
LCD_DrawLine(Xpos+7,Ypos+15,Xpos+15,Ypos+15,RGB565CONVERT(184,158,131));
LCD_DrawLine(Xpos+15,Ypos+7,Xpos+15,Ypos+15,RGB565CONVERT(184,158,131));
LCD_DrawLine(Xpos+7,Ypos-15,Xpos+15,Ypos-15,RGB565CONVERT(184,158,131));
LCD_DrawLine(Xpos+15,Ypos-15,Xpos+15,Ypos-7,RGB565CONVERT(184,158,131));
}
/*******************************************************************************
* Function Name : Read_Ads7846
* Description : Get TouchPanel X Y
* Input : None
* Output : None
* Return : Coordinate *
* Attention : None
*******************************************************************************/
Coordinate *Read_Ads7846(void)
{
static Coordinate screen;
int m0,m1,m2,TP_X[1],TP_Y[1],temp[3];
uint8_t count=0;
int buffer[2][9]={{0},{0}};
do
{
TP_GetAdXY(TP_X,TP_Y);
buffer[0][count]=TP_X[0];
buffer[1][count]=TP_Y[0];
count++;
}
while(!TP_INT_IN&& count<9); /* TP_INT_IN */
if(count==9) /* Average X Y */
{
/* Average X */
temp[0]=(buffer[0][0]+buffer[0][1]+buffer[0][2])/3;
temp[1]=(buffer[0][3]+buffer[0][4]+buffer[0][5])/3;
temp[2]=(buffer[0][6]+buffer[0][7]+buffer[0][8])/3;
m0=temp[0]-temp[1];
m1=temp[1]-temp[2];
m2=temp[2]-temp[0];
m0=m0>0?m0:(-m0);
m1=m1>0?m1:(-m1);
m2=m2>0?m2:(-m2);
if( m0>THRESHOLD && m1>THRESHOLD && m2>THRESHOLD ) return 0;
if(m0<m1)
{
if(m2<m0)
screen.x=(temp[0]+temp[2])/2;
else
screen.x=(temp[0]+temp[1])/2;
}
else if(m2<m1)
screen.x=(temp[0]+temp[2])/2;
else
screen.x=(temp[1]+temp[2])/2;
/* Average Y */
temp[0]=(buffer[1][0]+buffer[1][1]+buffer[1][2])/3;
temp[1]=(buffer[1][3]+buffer[1][4]+buffer[1][5])/3;
temp[2]=(buffer[1][6]+buffer[1][7]+buffer[1][8])/3;
m0=temp[0]-temp[1];
m1=temp[1]-temp[2];
m2=temp[2]-temp[0];
m0=m0>0?m0:(-m0);
m1=m1>0?m1:(-m1);
m2=m2>0?m2:(-m2);
if(m0>THRESHOLD&&m1>THRESHOLD&&m2>THRESHOLD) return 0;
if(m0<m1)
{
if(m2<m0)
screen.y=(temp[0]+temp[2])/2;
else
screen.y=(temp[0]+temp[1])/2;
}
else if(m2<m1)
screen.y=(temp[0]+temp[2])/2;
else
screen.y=(temp[1]+temp[2])/2;
return &screen;
}
return 0;
}
/*******************************************************************************
* Function Name : setCalibrationMatrix
* Description : Calculate K A B C D E F
* Input : None
* Output : None
* Return :
* Attention : None
*******************************************************************************/
FunctionalState setCalibrationMatrix( Coordinate * displayPtr,
Coordinate * screenPtr,
Matrix * matrixPtr)
{
FunctionalState retTHRESHOLD = ENABLE ;
/* K£½(X0£­X2) (Y1£­Y2)£­(X1£­X2) (Y0£­Y2) */
matrixPtr->Divider = ((screenPtr[0].x - screenPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) -
((screenPtr[1].x - screenPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ;
if( matrixPtr->Divider == 0 )
{
retTHRESHOLD = DISABLE;
}
else
{
/* A£½((XD0£­XD2) (Y1£­Y2)£­(XD1£­XD2) (Y0£­Y2))£¯K */
matrixPtr->An = ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) -
((displayPtr[1].x - displayPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ;
/* B£½((X0£­X2) (XD1£­XD2)£­(XD0£­XD2) (X1£­X2))£¯K */
matrixPtr->Bn = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].x - displayPtr[2].x)) -
((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].x - screenPtr[2].x)) ;
/* C£½(Y0(X2XD1£­X1XD2)+Y1(X0XD2£­X2XD0)+Y2(X1XD0£­X0XD1))£¯K */
matrixPtr->Cn = (screenPtr[2].x * displayPtr[1].x - screenPtr[1].x * displayPtr[2].x) * screenPtr[0].y +
(screenPtr[0].x * displayPtr[2].x - screenPtr[2].x * displayPtr[0].x) * screenPtr[1].y +
(screenPtr[1].x * displayPtr[0].x - screenPtr[0].x * displayPtr[1].x) * screenPtr[2].y ;
/* D£½((YD0£­YD2) (Y1£­Y2)£­(YD1£­YD2) (Y0£­Y2))£¯K */
matrixPtr->Dn = ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].y - screenPtr[2].y)) -
((displayPtr[1].y - displayPtr[2].y) * (screenPtr[0].y - screenPtr[2].y)) ;
/* E£½((X0£­X2) (YD1£­YD2)£­(YD0£­YD2) (X1£­X2))£¯K */
matrixPtr->En = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].y - displayPtr[2].y)) -
((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].x - screenPtr[2].x)) ;
/* F£½(Y0(X2YD1£­X1YD2)+Y1(X0YD2£­X2YD0)+Y2(X1YD0£­X0YD1))£¯K */
matrixPtr->Fn = (screenPtr[2].x * displayPtr[1].y - screenPtr[1].x * displayPtr[2].y) * screenPtr[0].y +
(screenPtr[0].x * displayPtr[2].y - screenPtr[2].x * displayPtr[0].y) * screenPtr[1].y +
(screenPtr[1].x * displayPtr[0].y - screenPtr[0].x * displayPtr[1].y) * screenPtr[2].y ;
}
return( retTHRESHOLD ) ;
}
/*******************************************************************************
* Function Name : getDisplayPoint
* Description : Touch panel X Y to display X Y
* Input : None
* Output : None
* Return :
* Attention : None
*******************************************************************************/
FunctionalState getDisplayPoint(Coordinate * displayPtr,
Coordinate * screenPtr,
Matrix * matrixPtr )
{
FunctionalState retTHRESHOLD =ENABLE ;
if( matrixPtr->Divider != 0 )
{
/* XD = AX+BY+C */
displayPtr->x = ( (matrixPtr->An * screenPtr->x) +
(matrixPtr->Bn * screenPtr->y) +
matrixPtr->Cn
) / matrixPtr->Divider ;
/* YD = DX+EY+F */
displayPtr->y = ( (matrixPtr->Dn * screenPtr->x) +
(matrixPtr->En * screenPtr->y) +
matrixPtr->Fn
) / matrixPtr->Divider ;
}
else
{
retTHRESHOLD = DISABLE;
}
return(retTHRESHOLD);
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
@@ -0,0 +1,66 @@
/*********************************************************************************************************
*
* File : TouchPanel.h
* Hardware Environment:
* Build Environment : RealView MDK-ARM Version: 4.20
* Version : V1.0
* By :
*
* (c) Copyright 2005-2011, WaveShare
* http://www.waveshare.net
* All Rights Reserved
*
*********************************************************************************************************/
#ifndef _TOUCHPANEL_H_
#define _TOUCHPANEL_H_
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx.h"
/* Private typedef -----------------------------------------------------------*/
typedef struct POINT
{
uint16_t x;
uint16_t y;
}Coordinate;
typedef struct Matrix
{
long double An,
Bn,
Cn,
Dn,
En,
Fn,
Divider ;
} Matrix ;
/* Private variables ---------------------------------------------------------*/
extern Coordinate ScreenSample[3];
extern Coordinate DisplaySample[3];
extern Matrix matrix ;
extern Coordinate display ;
/* Private define ------------------------------------------------------------*/
#define CHX 0x90
#define CHY 0xd0
/* Private function prototypes -----------------------------------------------*/
void TP_Init(void);
Coordinate *Read_Ads7846(void);
void TouchPanel_Calibrate(void);
void DrawCross(uint16_t Xpos,uint16_t Ypos);
void TP_DrawPoint(uint16_t Xpos,uint16_t Ypos);
FunctionalState setCalibrationMatrix( Coordinate * displayPtr,Coordinate * screenPtr,Matrix * matrixPtr);
FunctionalState getDisplayPoint(Coordinate * displayPtr,Coordinate * screenPtr,Matrix * matrixPtr );
#endif
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
@@ -0,0 +1,59 @@
#ifndef _CONFIG_H
#define _CONFIG_H
#include <stdio.h>
#include "stm32f4xx.h"
/**
* @brief Definition for TouchPanel
*/
/* Configure TouchPanel pins: TP_CS-> PC4 and TP_IRQ-> PC5 */
/**
* @brief Definition for TouchPanel
*/
/* Configure TouchPanel pins: TP_CS-> PC4 and TP_IRQ-> PC5 */
#define Open_TP_CS_PIN GPIO_Pin_0
#define Open_TP_CS_PORT GPIOI
#define Open_TP_CS_CLK RCC_AHB1Periph_GPIOI
#define Open_TP_IRQ_PIN GPIO_Pin_6
#define Open_TP_IRQ_PORT GPIOC
#define Open_TP_IRQ_CLK RCC_AHB1Periph_GPIOC
#define TP_CS(x) x ? GPIO_SetBits(Open_TP_CS_PORT,Open_TP_CS_PIN): GPIO_ResetBits(Open_TP_CS_PORT,Open_TP_CS_PIN)
#define TP_INT_IN GPIO_ReadInputDataBit(Open_TP_IRQ_PORT,Open_TP_IRQ_PIN)
/**
* @brief Definition for TouchPanel SPI
*/
/* Configure TouchPanel pins: TP_CLK-> PB13 and TP_MISO-> PB14 and TP_MOSI-> PB15 */
#define Open_RCC_SPI RCC_APB1Periph_SPI2
#define Open_GPIO_AF_SPI GPIO_AF_SPI2
#define Open_SPI SPI2
#define Open_SPI_CLK_INIT RCC_APB1PeriphClockCmd
#define Open_SPI_IRQn SPI2_IRQn
#define Open_SPI_IRQHANDLER SPI2_IRQHandler
#define Open_SPI_SCK_PIN GPIO_Pin_1
#define Open_SPI_SCK_GPIO_PORT GPIOI
#define Open_SPI_SCK_GPIO_CLK RCC_AHB1Periph_GPIOI
#define Open_SPI_SCK_SOURCE GPIO_PinSource1
#define Open_SPI_MISO_PIN GPIO_Pin_2
#define Open_SPI_MISO_GPIO_PORT GPIOI
#define Open_SPI_MISO_GPIO_CLK RCC_AHB1Periph_GPIOI
#define Open_SPI_MISO_SOURCE GPIO_PinSource2
#define Open_SPI_MOSI_PIN GPIO_Pin_3
#define Open_SPI_MOSI_GPIO_PORT GPIOI
#define Open_SPI_MOSI_GPIO_CLK RCC_AHB1Periph_GPIOI
#define Open_SPI_MOSI_SOURCE GPIO_PinSource3
#endif /*_CONFIG_H*/
@@ -0,0 +1,110 @@
/*********************************************************************************************************
*
* File : systick.c
* Hardware Environment:
* Build Environment : RealView MDK-ARM Version: 4.20
* Version : V1.0
* By :
*
* (c) Copyright 2005-2011, WaveShare
* http://www.waveshare.net
* All Rights Reserved
*
*********************************************************************************************************/
/* Includes ------------------------------------------------------------------*/
#include "systick.h"
/* Private variables ---------------------------------------------------------*/
static uint8_t delay_fac_us = 0;
static uint16_t delay_fac_ms = 0;
static FlagStatus Status;
/*******************************************************************************
* Function Name : delay_init
* Description :
* Input : None
* Output : None
* Return : None
* Attention :
*******************************************************************************/
void delay_init(void)
{
RCC_ClocksTypeDef RCC_ClocksStatus;
RCC_GetClocksFreq(&RCC_ClocksStatus);
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
SysTick_ITConfig(DISABLE);
delay_fac_us = RCC_ClocksStatus.HCLK_Frequency / 8000000;
delay_fac_ms = RCC_ClocksStatus.HCLK_Frequency / 8000;
}
/*******************************************************************************
* Function Name : delay_us
* Description :
* Input : - Nus:
* Output : None
* Return : None
* Attention :
*******************************************************************************/
void delay_us(u32 Nus)
{
SysTick_SetReload(delay_fac_us * Nus);
SysTick_CounterCmd(SysTick_Counter_Clear);
SysTick_CounterCmd(SysTick_Counter_Enable);
do
{
Status = SysTick_GetFlagStatus(SysTick_FLAG_COUNT);
}while (Status != SET);
SysTick_CounterCmd(SysTick_Counter_Disable);
SysTick_CounterCmd(SysTick_Counter_Clear);
}
/*******************************************************************************
* Function Name : delay_ms
* Description :
* Input : - nms:
* Output : None
* Return : None
* Attention :
*******************************************************************************/
void _delay_ms(uint16_t nms)
{
uint32_t temp = delay_fac_ms * nms;
if (temp > 0x00ffffff)
{
temp = 0x00ffffff;
}
SysTick_SetReload(temp);
SysTick_CounterCmd(SysTick_Counter_Clear);
SysTick_CounterCmd(SysTick_Counter_Enable);
do
{
Status = SysTick_GetFlagStatus(SysTick_FLAG_COUNT);
}while (Status != SET);
SysTick_CounterCmd(SysTick_Counter_Disable);
SysTick_CounterCmd(SysTick_Counter_Clear);
}
/*********************************************************************************************************
END FILE
*********************************************************************************************************/
@@ -0,0 +1,59 @@
/*********************************************************************************************************
*
* File : syhstick.h
* Hardware Environment:
* Build Environment : RealView MDK-ARM Version: 4.20
* Version : V1.0
* By :
*
* (c) Copyright 2005-2011, WaveShare
* http://www.waveshare.net
* All Rights Reserved
*
*********************************************************************************************************/
#ifndef __SYSTICK_H
#define __SYSTICK_H
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx.h"
/* Private function prototypes -----------------------------------------------*/
void delay_init(void);
void delay_ms(uint16_t nms);
void delay_us(uint32_t nus);
#endif
/*********************************************************************************************************
END FILE
*********************************************************************************************************/