spi przyklad2 update


/* Author: Szymon Panecki @ Embedded Systems Scientific Club
Title: Example 4: SPI (update!)
Date: 18.05.2009
*/
#include "main.h"
#include "LCD.h"

GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
u16 i;

unsigned char LCD_InitTab[14] = {0x40,0xA1,0xC0,0xA6,0xA2,0x2F,0xF8,0x00,0x27,0x81,0x16,0xAC,0x00,0xAF};

//local functions

void setY(u8 where)
{

//komenda
GPIO_ResetBits(GPIOB, GPIO_Pin_14);
//linia
while(SPI_GetFlagStatus(SPI2, SPI_FLAG_TXE)==RESET);
SPI_SendData(SPI2, 0xB0 + where);
while(SPI_GetFlagStatus(SPI2, SPI_FLAG_TXE)==RESET);
SPI_SendData(SPI2, 0x01 + 0);
while(SPI_GetFlagStatus(SPI2, SPI_FLAG_TXE)==RESET);
SPI_SendData(SPI2, 0x00 + 0);
}

void print_data(u8 data)
{
//dane
GPIO_SetBits(GPIOB, GPIO_Pin_14);
//wartosc danych
while(SPI_GetFlagStatus(SPI2, SPI_FLAG_TXE)==RESET);
SPI_SendData(SPI2, data);

}

void main (void)
{
#ifdef DEBUG
debug();
#endif

RCC_DeInit();
RCC_HSEConfig(RCC_HSE_ON);

RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div2);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
{
}
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while(RCC_GetSYSCLKSource() != 0x08)
{
}

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

//B.14 output to controll LCD
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);

//configuration of SPI2 pins: SCK and MOSI
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);

//C.9 outputs to controll LCD
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOC, &GPIO_InitStructure);

SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2, &SPI_InitStructure);

SPI_Cmd(SPI2, ENABLE);

//GPIO_WriteBit(GPIOC, GPIO_Pin_9, Bit_RESET);
GPIO_ResetBits(GPIOC, GPIO_Pin_9);
GPIO_SetBits(GPIOC, GPIO_Pin_9);
GPIO_ResetBits(GPIOB, GPIO_Pin_14);

//inicjalizacja
for(i = 0 ; i <=13 ; i++)
{
while(SPI_GetFlagStatus(SPI2, SPI_FLAG_TXE)==RESET);
SPI_SendData(SPI2, LCD_InitTab[i]);
}

setY(0);
print_data(0x00);
print_data(0x00);
print_data(0x00);
print_data(0x00);
print_data(0x00);
print_data(0x00);

setY(1);
print_data(0x00);
print_data(0x00);
print_data(0x00);
print_data(0x00);
print_data(0x00);
print_data(0x00);

setY(2);
print_data(0x00);
print_data(0x00);
print_data(0x00);
print_data(0x00);
print_data(0x00);
print_data(0x00);

setY(3);
print_data(0x00);
print_data(0x00);
print_data(0x00);
print_data(0x00);
print_data(0x00);
print_data(0x00);

//K
setY(0);
print_data(0xFE);
print_data(0x10);
print_data(0x28);
print_data(0x44);
print_data(0x82);
print_data(0x00);

//N
setY(1);
print_data(0xFE);
print_data(0x04);
print_data(0x38);
print_data(0x40);
print_data(0xFE);
print_data(0x00);

//S
setY(2);
print_data(0x4C);
print_data(0x92);
print_data(0x92);
print_data(0x92);
print_data(0x64);
print_data(0x00);

//W
setY(3);
print_data(0xFE);
print_data(0x40);
print_data(0x20);
print_data(0x40);
print_data(0xFE);
print_data(0x00);

while(1)
{

}
}

//end of file

Wyszukiwarka

Podobne podstrony:
spi przyklad2
spi przyklad1
gpio,spi,usart, can przyklad
Sterowanie rejestrami przesuwnymi z wykorzystaniem interfejsu SPI na przykładzie 6 cyfrowego wyświet
cw6 arkusz obliczeniowy przyklad
przykładowy test A
przykladowyJrkusz150UM[1] drukow
OEiM AiR Przykladowy Egzamin
Znaczenie korytarzy ekologicznych dla funkcjonowania obszarów chronionych na przykładzie Gorców
przykladowe zadania redoks
Ćwiczenie 14 przykład
6 6 Zagadnienie transportowe algorytm transportowy przykład 2
Przyklad5 csproj FileListAbsolute
Człowiek wobec przestrzeni Omów na przykładzie Sonetó~4DB

więcej podobnych podstron