我来录人上STM8的驱动TFT屏
/**
********************************************************************
* @file main.c
* @authorHolts.he
* @version V2.1.0
* @date 2014-04-07
* @brief Main program body
********************************************************************
* @attention
*
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
*
* <h2><center>© COPYRIGHT 2011 STMicroelectronics</center></h2>
********************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "stm8s.h"
#include "ptask.h"
//#include "lcd_hx8309.h"
//#include "gui_disp.h"
#include "cms015.h"
//#include "st7585.h"
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define TIM4_TICK_1MS 124
#define LED_Port GPIOA //LED控制口
#define LED_PINS(GPIO_PIN_1 | GPIO_PIN_2)
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
void PWM1_Init(void);
void TIM4_Config(void);
unsigned char task1(void);
unsigned char task2(void);
/* Private functions ---------------------------------------------------------*/
/* Global variables ----------------------------------------------------------*/
volatile unsigned char timers;
volatile unsigned char Trg;
volatile unsigned char Cont;
volatile unsigned char LCDDly = 0;
unsigned char DutyCycle;
/* Public functions ----------------------------------------------------------*/
// SPI初始化
//void SPI_Init(void)
//{
//SPI_DeInit();
//CLK_PeripheralClockConfig(CLK_PERIPHERAL_SPI, ENABLE);
//SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_256, SPI_MODE_MASTER, SPI_CLOCKPOLARITY_LOW, SPI_CLOCKPHASE_1EDGE, SPI_DATADIRECTION_1LINE_TX, SPI_NSS_SOFT, 0x00);
//SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_128, SPI_MODE_MASTER, SPI_CLOCKPOLARITY_LOW, SPI_CLOCKPHASE_2EDGE, SPI_DATADIRECTION_2LINES_FULLDUPLEX, SPI_NSS_SOFT,0x00);
//SPI_Cmd(ENABLE);
//}
/**
* @briefMain program.
* @paramNone
* @retval None
*/
void main(void)
{
/* Configures clocksFmaster = 16MHz */
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
TIM4_Config();
//SPI_Init();
/* enable interrupts */
enableInterrupts();
GPIO_Init(LED_Port, (GPIO_Pin_TypeDef)LED_PINS, GPIO_MODE_OUT_PP_HIGH_FAST);
/* Init LCD */
//LCD_hx8309_Initialization();无反应
//LCD_init(); // 无反应
//PowerOnLcdinit();
/* Init the Font */
//GUI_Font_Init();
//LCD_SetCursorPos(LCD_LINE1, 0);
//LCD_Print("SPI-LCD example");
//LCDTEST();
//Test_GUI_Font();
//hx8309_Write_Dat(0x5555);
//hx8309_Write_Dat(0xAAAA);
LcdTest();
while(1)
{
//if ( LCDDly == 0 ) LCDDly = 200;
//GPIO_WriteReverse(LED_Port, LED_PINS);
//while (LCDDly != 0);
RunTask(task1,Task1_ID);
RunTask(task2,Task2_ID);
}
}
/**
* @briefPrint ST logo on the LCD
* @paramNone
* @retval None
*/
/*unsigned char DlyMs1(unsigned char nCount);
{
;
}
*/
/**
*****************************************************************
* @brief Initialize all the PWM Parameters
* @par Parameters: None
* @retval void None
* @par Required preconditions: None
*****************************************************************
*/
void PWM1_Init(void)
{
/* PWM1 Mode configuration Channel2
* Duty Cycle = *100=50% */
TIM1_DeInit();
/* Time Base configuration */
/*
TIM1_Prescaler = 320 分频16000/320 = 50 KHz
TIM1_Period = 99 频率50K /(99+1) = 500Hz
TIM1_CounterMode = TIM1_COUNTERMODE_UP
TIM1_RepetitionCounter = 0
*/
//TIM1_TimeBaseInit(640, TIM1_COUNTERMODE_UP, 99, 0); //250Hz
//TIM1_TimeBaseInit(320, TIM1_COUNTERMODE_UP, 99, 0); //500Hz
TIM1_TimeBaseInit(160, TIM1_COUNTERMODE_UP, 99, 0); //1KHz
//TIM1_TimeBaseInit(106, TIM1_COUNTERMODE_UP, 99, 0);//1.5KHz
//TIM1_TimeBaseInit(80, TIM1_COUNTERMODE_UP, 99, 0); //2KHz
//TIM1_TimeBaseInit(64, TIM1_COUNTERMODE_UP, 99, 0); //2.5KHz
//TIM1_TimeBaseInit(52, TIM1_COUNTERMODE_UP, 99, 0); //3KHz
//TIM1_TimeBaseInit(45, TIM1_COUNTERMODE_UP, 99, 0); //3.5KHz
//TIM1_TimeBaseInit(40, TIM1_COUNTERMODE_UP, 99, 0); //4KHz
//TIM1_TimeBaseInit(36, TIM1_COUNTERMODE_UP, 99, 0); //4.5KHz
//TIM1_TimeBaseInit(32, TIM1_COUNTERMODE_UP, 99, 0); //5KHz
//TIM1_TimeBaseInit(16, TIM1_COUNTERMODE_UP, 99, 0); //10KHz
//TIM1_TimeBaseInit(8, TIM1_COUNTERMODE_UP, 99, 0); //20KHz
/* Channel 2 Configuration in PWM mode */
/*
TIM1_OCMode = TIM1_OCMODE_PWM2
TIM1_OutputState = TIM1_OUTPUTSTATE_ENABLE
TIM1_OutputNState = TIM1_OUTPUTNSTATE_ENABLE
TIM1_Pulse = DutyCycle
TIM1_OCPolarity = TIM1_OCPOLARITY_LOW
TIM1_OCNPolarity = TIM1_OCNPOLARITY_HIGH
TIM1_OCIdleState = TIM1_OCIDLESTATE_SET
TIM1_OCNIdleState = TIM1_OCIDLESTATE_RESET
*/
TIM1_OC3Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, DutyCycle,TIM1_OCPOLARITY_LOW, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET, TIM1_OCNIDLESTATE_RESET);
TIM1_OC4Init(TIM1_OCMODE_PWM2, TIM1_OUTPUTSTATE_ENABLE, DutyCycle, TIM1_OCPOLARITY_LOW, TIM1_OCIDLESTATE_SET);
/* TIM1 counter enable */
TIM1_Cmd(ENABLE);
/* TIM1 Main Output Enable */
TIM1_CtrlPWMOutputs(ENABLE);
}
/**
*****************************************************************
* @briefConfigure TIM4 to generate an update interrupt each 1ms
* @paramNone
* @retval None
*****************************************************************
*/
void TIM4_Config(void)
{
/* TIM4 configuration:
- TIM4CLK is set to 16 MHz, the TIM4 Prescaler is equal to 128 so the TIM1 counter
clock used is 16 MHz / 128 = 125 000 Hz
- With 125 000 Hz we can generate time base:
max time base is 2.048 ms if TIM4_PERIOD = 255 --> (255 + 1) / 125000 = 2.048 ms
min time base is 0.016 ms if TIM4_PERIOD = 1 --> (1 + 1) / 125000 = 0.016 ms
- In this example we need to generate a time base equal to 1 ms
so TIM4_PERIOD = (0.001 * 125000 - 1) = 124 */
/* Time base configuration */
TIM4_TimeBaseInit(TIM4_PRESCALER_128, TIM4_TICK_1MS);
/* Clear TIM4 update flag */
TIM4_ClearFlag(TIM4_FLAG_UPDATE);
/* Enable update interrupt */
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
/* Enable TIM4 */
TIM4_Cmd(ENABLE);
}
/*******************************
task1
*******************************/
unsigned char task1(void)
{
_SS
while(1)
{
WaitX(100);
GPIO_WriteHigh(LED_Port, GPIO_PIN_1);
WaitX(200);
GPIO_WriteLow(LED_Port, GPIO_PIN_1);
}
_EE
}
/*******************************
task2
*******************************/
unsigned chartask2(void)
{
_SS
while(1)
{
GPIO_WriteHigh(LED_Port, GPIO_PIN_2);
WaitX(50);
GPIO_WriteLow(LED_Port, GPIO_PIN_2);
WaitX(50);
}
_EE
}
#ifdef USE_FULL_ASSERT
/**
* @briefReports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif
/**
* @}
*/
/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
页:
[1]