您的位置:首页 > 其它

stm8s 开发SPI的两种方法

2014-05-03 14:18 288 查看
1: void GPIO_Configuration(void)

Add GPIOA configuration

void GPIO_Configuration(void)

{

GPIO_DeInit(GPIOD);

/* Configure PD0 (LED1) as output push-pull low (led switched on) */

GPIO_Init(GPIOD, GPIO_PIN_0, GPIO_MODE_OUT_PP_LOW_FAST);

/* GPIOD reset */

GPIO_DeInit(GPIOC);

/* Configure PD0 (LED1) as output push-pull low (led switched on) */

GPIO_Init(GPIOC, GPIO_PIN_5 , GPIO_MODE_OUT_PP_HIGH_SLOW);

GPIO_Init(GPIOC, GPIO_PIN_6, GPIO_MODE_OUT_PP_HIGH_SLOW);

GPIO_Init(GPIOC, GPIO_PIN_4, GPIO_MODE_OUT_PP_LOW_FAST);}

2: void HC595SendData(u8 SendData)

send data to HC595 Using GPIOA+SPI

GPIOC.6---- SER

GPIOC.5---- SCLK

GPIOC.4---- RCLK

void HC595SendData(u8 SendData)

{

#if Comm_MODE

while (SPI_GetFlagStatus( SPI_FLAG_TXE) == RESET);

SPI_SendData(SendData);

while (SPI_GetFlagStatus(SPI_FLAG_RXNE) == RESET);

SPI_ReceiveData(); /*读取因上面发送数据产生的无效数据*/

#else

// 寄存器(可赋值):不优化290KHz,最高速度优化:319KHz

u8 i;

for(i=0; i<8; i++)

{

if(SendData<<i & 0x80) GPIOC->ODR |= GPIO_PIN_6; //SER

else GPIOC->ODR &=~GPIO_PIN_6;

GPIOC->ODR |= GPIO_PIN_5; //SCLK

GPIOC->ODR &=~GPIO_PIN_5;

}

#endif

}

3: void sdata(void)

Send 8 byte data to HC595

void sdata(void)

{

HC595SendData(segbit[m]);

HC595SendData(fseg[disbuf[m]]);

GPIOC->ODR |= GPIO_PIN_4; //RCLK

GPIOC->ODR &=~GPIO_PIN_4;

m++;

if(m==8)

{

m=0;

}

}

**

1.declare m as globe
variable

unsigned char m;

#define Comm_MODE 1/0

2.declare segbit , fseg and disbuf variable

U8 fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsigned char segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

unsigned char disbuf[8]={0,0,0,0,0,0,0,0};

3.should include the head file

#include "stm8s_spi.h"

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: