/*********************************************************************************/ /** * File: letters.c * Author: Jan Dvořák z Vozerovic * FEL-ID: dvoraj42 * e-mail: dvorkaman@gmail.com * site: dvorkaman.php5.cz */ #ifndef __letters_c__ #define __letters_c__ int getLCDLetterCommand(int letter); /*********************************************************************************/ /** * 7 - Segment */ #define SEGMENT_0 0xFC #define SEGMENT_1 0x60 #define SEGMENT_2 0xDA #define SEGMENT_3 0xF2 #define SEGMENT_4 0x66 #define SEGMENT_5 0xB6 #define SEGMENT_6 0xBE #define SEGMENT_7 0xE0 #define SEGMENT_8 0xFE #define SEGMENT_9 0xE6 #define SEGMENT_C 0x9C #define SEGMENT_F 0x8E #define SEGMENT_G 0xBC #define SEGMENT_N 0x2A #define SEGMENT_T 0x1E #define SEGMENT_L 0x1C #define SEGMENT_DOT 0x01 #define SEGMENT_EMPTY 0x00 /*********************************************************************************/ /** * LCD */ int getLCDLetterCommand(int letter) { // A - Z if( letter>='A' && letter <='Z' ) { return 0x41 + letter - 'A'; // a - z }else if( letter>='a' && letter <='z' ) { return 0x61 + letter - 'a'; // 0 - 9 }else if( letter>='0' && letter <='9' ) { return 0x30 + letter - '0'; } // special switch(letter) { case '!': return 0x21; case '"': return 0x22; case '#': return 0x23; case '$': return 0x24; case '%': return 0x25; case '&': return 0x26; case '\'': return 0x27; case '(': return 0x28; case ')': return 0x29; case '*': return 0x2A; case '+': return 0x2B; case ',': return 0x2C; case '-': return 0x2D; case '.': return 0x2E; case '/': return 0x2F; case '^': return 0x4E; case '_': return 0x4F; case '|': return 0x7C; case '{': return 0x7B; case '}': return 0x7D; case '[': return 0x5B; case ']': return 0x5D; case ' ': return 0x20; case '@': return 0x40; case ':': return 0x3A; } return 0x20; // space } #endif #ifndef __others_c__ #define __others_c__ #include "stm32F10x.h" #include "stdio.h" void RCC_Configuration(void); void GPIO_Configuration(void); void InitialiteInterrupt(void); void InitializeUSART(void); void NVIC_Configuration(void); /*********************************************************************************/ /** * RCC Configuration * @author {http://neuron.feld.cvut.cz/micro/stm32/tut-03-usart-irq.html#config} * @author {http://mcu.cz/comment-n2122.html} */ void RCC_Configuration(void) { FLASH_SetLatency(FLASH_Latency_2); FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); InitialiteInterrupt(); InitializeUSART(); } /*********************************************************************************/ /** * GPIO configurations * @author {http://neuron.feld.cvut.cz/micro/stm32/tut-03-usart-irq.html} */ void GPIO_Configuration(void) { GPIO_InitTypeDef init; GPIO_InitTypeDef GPIO_InitStructure; init.GPIO_Speed = GPIO_Speed_10MHz; init.GPIO_Mode = GPIO_Mode_Out_PP; // Green led init.GPIO_Pin = GPIO_Pin_9; GPIO_Init(GPIOC, &init); // Blue led init.GPIO_Pin = GPIO_Pin_8; GPIO_Init(GPIOC, &init); /* Konfigurujeme USART1_Tx jako 'alternate function push-pull' */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); /* Konfigurujeme USART1_Rx jako 'input floating' */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); } /*********************************************************************************/ /** * Initialization of interrupt * @author {http://mcu.cz/comment-n2119.html} */ void InitialiteInterrupt(void) { SysTick_Config(SystemCoreClock / 1000); } /*********************************************************************************/ /** * Initialization of interrupt * @author {http://neuron.feld.cvut.cz/micro/stm32/tut-02-usart.html} */ void InitializeUSART(void) { USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No ; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); } /*********************************************************************************/ /** * Configuration of NVIC * @author {http://neuron.feld.cvut.cz/micro/stm32/tut-03-usart-irq.html} */ void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /*********************************************************************************/ #endif