Ярлыки

_GetPixelIndex (1) _SetPixelIndex (1) 3-phase (1) 800x480 (1) АЦП (1) генератор (1) синхронный усилитель (2) структура (1) учебный курс (1) шаговый двигатель (1) ШИМ (2) accert (1) AD7608 (1) AD8429 (1) ADC (5) amplifer (1) arccos (1) arcsin (1) arctang (2) arctg (3) ARM (2) arm_sqrt_q15 (2) assembler (6) ASSERT (1) atan (2) bit (1) Bitband (1) boot (3) bootlloader (1) BUTTON (1) C (5) C# (1) CAN (2) CC2530 (5) CMSIS (4) command (1) Cordic (1) Core746I (1) CubeMX (4) DBGMCU (2) debug (2) debug.ini (1) delegate (1) Digital Potentiometers (1) DigitalPOT (1) Discovery (1) DMA (9) DMA2D (1) DSP (1) DSP library (1) DWT (1) EFM32 (5) EmWin (9) EXTI (1) FATFS (1) FMC (2) FreeRTOS (2) gl868-dual cmux (1) GPIO (4) GUI (2) GUIBuilder (1) GUIDRV_CompactColor_16 (1) HAL (3) HappyGecko (1) Hard Fault (2) heap (1) I2C (1) ID (1) ILI9320 (1) ILI9325 (1) Initialisation (1) InitLTDC (1) Instrumentithion (1) Interrupt (4) ITR (1) JTAG (1) Keil (5) LCDConf (2) lock-in (1) LTCD (1) LTDC (3) main (1) memory (1) MINI_STM32 Revision 01 (1) nBoot0 (1) NVIC (1) OnePulse (2) OSAL (4) pack (1) phase (1) printf (3) Pulse (1) PWM (12) RCC (2) RCR (1) Register (1) RESET (2) RS232 (3) RSS (1) RTC (3) RTOS-RTX (1) RTT (1) RTX-RTOS (1) SDCard (1) SDRAM (6) Segger (2) SPI (3) sqrt (3) SSD1298 (1) SSD1963 (1) Standart Peripherial Library (3) STANDBAY (1) startup (1) STemWin (8) stepper motor (1) STlink (2) STM32 (17) STM32429ZI (1) STM32Cube (1) STM32DBG.IN (1) STM32F (28) STM32F0 (4) STM32F1 (13) STM32F4 (10) STM32F4 Discovery (1) STM32F407ZG (1) STM32F429 (2) STM32F746 (1) STOP (1) string (1) struct (1) SWD (1) SWD JTAG (1) Synhronization (1) system_stm32f4xx.c (1) SystemInit (1) SysTick (1) task (4) telit (1) TIM (27) typedef (1) UART (1) USART (9) viewer (2) WM_PAINT (1) Z-stack (5) ZigBee (5)

суббота, 20 декабря 2014 г.

STM32F4 & LSD

  1. #include "stm32f4xx.h"    //Include main header for MCU
  2.  
  3. #define DATA_PORT GPIOC->ODR
  4. #define CMD_PORT GPIOA->ODR
  5.  
  6. #define DATA 6
  7. #define DATA_CLR 0xFFFFFC3F
  8.  
  9. #define LCD_E  0x100     //PA8
  10. #define LCD_RS 0x200     //PA9
  11.  
  12. #define CMD 0
  13. #define TXT 1
  14.  
  15. #define        LINE1    0x80        // Start address of first line
  16. #define        LINE2    0xC0        // Start address of second line
  17.  
  18. void WaitLCDBusy(void);
  19. void LCD_Init(void);
  20. void LCD_DATA(unsigned char data,unsigned char type);
  21. void LCD_NYB(unsigned char nyb,unsigned char type);
  22. void LCD_STR(const char *text);
  23. void LCD_LINE(char line);
  24. void DelayMS(unsigned int ms);
  25. void initDiscovery(void);
  26. void delay(int ticks)
  27. {
  28.   while(ticks--);
  29. }
  30.  
  31. void lcd_init()
  32. {
  33.     CMD_PORT &= ~(LCD_E);  //LCD_E = 0;                    //clear enable
  34.     CMD_PORT &= ~(LCD_RS); //LCD_RS = 0;                 //going to write command
  35.  
  36.     DelayMS(30);                //delay for LCD to initialise.
  37.     LCD_NYB(0x30,0);              //Required for initialisation
  38.     DelayMS(5);                 //required delay
  39.     LCD_NYB(0x30,0);              //Required for initialisation
  40.     DelayMS(1);                 //required delay
  41.     LCD_DATA(0x02,0);           //set to 4 bit interface, 1 line and 5*7 font
  42.     LCD_DATA(0x28,0);           //set to 4 bit interface, 2 line and 5*10 font
  43.     LCD_DATA(0x0c,0);           //set to 4 bit interface, 2 line and 5*7 font
  44.     LCD_DATA(0x01,0);           //clear display
  45.     LCD_DATA(0x06,0);           //move cursor right after write
  46. }
  47.  
  48. //--------------------------------------------------------------------------------//
  49. void LCD_DATA(unsigned char data,unsigned char type){
  50.  
  51.     WaitLCDBusy();                  //TEST LCD FOR BUSY
  52.  
  53.     if(type == CMD){
  54.         CMD_PORT &= ~(LCD_RS);                 //COMMAND MODE
  55.     } else {
  56.         CMD_PORT |= LCD_RS;                 //CHARACTER/DATA MODE
  57.     }
  58.  
  59.     LCD_NYB(data>>4,type);               //WRITE THE UPPER NIBBLE
  60.     LCD_NYB(data,type);                  //WRITE THE LOWER NIBBLE
  61. }
  62. //--------------------------------------------------------------------------------//
  63. void WaitLCDBusy(void){
  64.     DelayMS(2);              //DELAY 1 MilliSeconds
  65. }
  66. //--------------------------------------------------------------------------------//
  67. void LCD_NYB(unsigned char nyb,unsigned char type){
  68.     DATA_PORT &= DATA_CLR;    //LCD_PORT &= 0xF0;                     //CLEAR LOWER PORT NIBBLE
  69.     DATA_PORT |= (nyb<<DATA); //LCD_PORT |= (nyb & 0x0F);             //SEND DATA LINE THE INFO
  70.  
  71.     if(type == CMD){
  72.         CMD_PORT &= ~(LCD_RS);                 //COMMAND MODE
  73.     } else {
  74.         CMD_PORT |= LCD_RS;                 //CHARACTER/DATA MODE
  75.     }
  76.  
  77.     CMD_PORT |= LCD_E;    //LCD_E = 1;          //ENABLE LCD DATA LINE
  78.     delay(100);                //SMALL DELAY
  79.     CMD_PORT &= ~(LCD_E); //LCD_E = 0;       //DISABLE LCD DATA LINE
  80. }
  81. //--------------------------------------------------------------------------------//
  82. void LCD_STR(const char *text){
  83.     while(*text){
  84.         LCD_DATA(*text++,1);
  85.     }
  86. }
  87. void LCD_STR2(unsigned char *text){
  88.     while(*text)
  89.     {
  90.         LCD_DATA(*text++,1);
  91.     }
  92. }
  93. //--------------------------------------------------------------------------------//
  94. void LCD_LINE(char line){
  95.     switch(line){
  96.         case 0:
  97.         case 1:
  98.             LCD_DATA(LINE1,0);
  99.             break;
  100.         case 2:
  101.             LCD_DATA(LINE2,0);
  102.             break;
  103.     }
  104. }
  105. //--------------------------------------------------------------------------------//
  106.  
  107. //--------------------------------------------------------------------------------//
  108. void DelayMS(unsigned int ms){
  109.     unsigned int x;
  110.     for(x=0;x<ms;x++)
  111.         delay(600);
  112. }
  113. //  Main      //
  114. void initDiscovery(void)
  115. {
  116.   RCC->CFGR = RCC_CFGR_SW_HSE;
  117.   RCC->AHB1ENR = RCC_AHB1ENR_GPIOAEN|RCC_AHB1ENR_GPIOCEN;
  118.   RCC->CR |= RCC_CR_HSEON;
  119.  
  120.   while((RCC->CR & RCC_CR_HSERDY)==0);
  121.  
  122.   GPIOC->MODER=GPIO_MODER_MODER6_0|GPIO_MODER_MODER7_0|GPIO_MODER_MODER8_0|GPIO_MODER_MODER9_0;
  123.   GPIOA->MODER=GPIO_MODER_MODER8_0|GPIO_MODER_MODER9_0;
  124.  
  125.   GPIOC->OSPEEDR = GPIO_OSPEEDER_OSPEEDR6_1 | GPIO_OSPEEDER_OSPEEDR7_1 | GPIO_OSPEEDER_OSPEEDR8_1 | GPIO_OSPEEDER_OSPEEDR9_1;
  126.   GPIOA->OSPEEDR = GPIO_OSPEEDER_OSPEEDR8_1 | GPIO_OSPEEDER_OSPEEDR9_1;
  127. }
  128.  
  129. void main()
  130. {
  131.   initDiscovery();
  132.  
  133.   lcd_init();
  134.  
  135.   DelayMS(3);
  136.   LCD_LINE(1);
  137.   LCD_STR((const char*)"    Test    ");
  138.  
  139.   DelayMS(100);
  140.   LCD_LINE(2);
  141.   LCD_STR((const char*)"  STM32F4 LCD  ");
  142.   DelayMS(100);
  143.  
  144.   while(1)
  145.   {
  146.  
  147.   }
  148. }

Комментариев нет:

Отправить комментарий