以下代码只需放在一个完整的.c文件中运行就行了,添加基本的支持库就能运行了.
#include "stm32f10x.h"
#define SCK_1 GPIO_SetBits(GPIOA, GPIO_Pin_4)
#define SCK_0 GPIO_ResetBits(GPIOA, GPIO_Pin_4)
#define MOSI_1 GPIO_SetBits(GPIOA, GPIO_Pin_5)
#define MOSI_0 GPIO_ResetBits(GPIOA, GPIO_Pin_5)
#define CS_1 GPIO_SetBits(GPIOA, GPIO_Pin_6)
#define CS_0 GPIO_ResetBits(GPIOA, GPIO_Pin_6)
void writebyte(u8 data);
void mygpioinit(void);
void senddata(void);
/*******************************************************
函数名:mygpioinit(void)
功能:初始化端口
*******************************************************/
void mygpioinit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
/*******************************************************
函数名:senddata()
功能:发送数据
*******************************************************/
void senddata(void)
{
CS_0;
writebyte(0x11); //发送命令,参照datasheet5.2将数据写入数据寄存器进行配置
writebyte(0xbb); //发送数据,范围是0x00到0xff
CS_1;
}
/*******************************************************
函数名:writebyte(u8 data)
功能:模拟spi
*******************************************************/
void writebyte(u8 data)
{
u8 i;
SCK_0;
MOSI_0;
for (i = 0; i < 8; i++ )
{
MOSI_0;
SCK_0;
if (data & 0x80) //将data与0x80进行与预算,目的是取得date二进制首位数值,如果首位是1,那么MOSI就会变成高电平,否则就会保持低电平
{
MOSI_1;
}
SCK_0;
SCK_1;
data <<= 1 ; //将date左移,继续循环进行比较
}
}
|