初级会员
- 积分
- 87
- 金钱
- 87
- 注册时间
- 2015-5-18
- 在线时间
- 17 小时
|
5金钱
下面是我改过的程序,还是用不了,我改了最下面的那个函数和定义了一下IO口,新手求大神帮我看看!<br />
#include "spi.h"<br />
#include "stm32f10x_spi.h"<br />
<br />
////////////////////////////////////////////////////////////////////////////////// <br />
//本程序只供学习使用,未经作者许可,不得用于其它任何用途<br />
//Mini STM32开发板<br />
//SPI 驱动函数 <br />
//正点原子@ALIENTEK<br />
//技术论坛:www.openedv.com<br />
//修改日期:2010/6/13 <br />
//版本:V1.0<br />
//版权所有,盗版必究。<br />
//Copyright(C) 正点原子 2009-2019<br />
//All rights reserved<br />
////////////////////////////////////////////////////////////////////////////////// <br />
<br />
<br />
//以下是SPI模块的初始化代码,配置成主机模式,访问SD Card/W25X16/24L01/JF24C <br />
//SPI口初始化<br />
//这里针是对SPI1的初始化<br />
<br />
//SPI_InitTypeDef SPI_InitStructure;<br />
<br />
#define MOSI_H GPIO_SetBits(GPIOA, GPIO_Pin_7)<br />
#define MOSI_L GPIO_ResetBits(GPIOA, GPIO_Pin_7)<br />
#define SCLK_H GPIO_SetBits(GPIOA, GPIO_Pin_5)<br />
#define SCLK_L GPIO_ResetBits(GPIOA, GPIO_Pin_5)<br />
#define MISO GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6)<br />
<br />
void SPI1_Init(void)<br />
{<br />
GPIO_InitTypeDef GPIO_InitStructure;<br />
<br />
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE ); <br />
<br />
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;<br />
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出<br />
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;<br />
GPIO_Init(GPIOA, &GPIO_InitStructure);<br />
<br />
GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7); <br />
} <br />
//SPI 速度设置函数<br />
//SpeedSet:<br />
//SPI_BaudRatePrescaler_2 2分频 (SPI 36M@sys 72M)<br />
//SPI_BaudRatePrescaler_8 8分频 (SPI 9M@sys 72M)<br />
//SPI_BaudRatePrescaler_16 16分频 (SPI 4.5M@sys 72M)<br />
//SPI_BaudRatePrescaler_256 256分频 (SPI 281.25K@sys 72M)<br />
<br />
void SPI1_SetSpeed(u8 SpeedSet)<br />
{<br />
//SPI_InitStructure.SPI_BaudRatePrescaler = SpeedSet;<br />
//SPI_Init(SPI1, &SPI_InitStructure);<br />
// SPI_Cmd(SPI1,ENABLE);<br />
SPI1->CR1&=0XFFC7; <br />
SPI1->CR1|=SpeedSet; //设置SPI1速度 <br />
SPI1->CR1|=1<<6; //SPI设备使能 <br />
} <br />
<br />
//SPIx 读写一个字节<br />
//TxData:要写入的字节<br />
//返回值:读取到的字节<br />
<br />
u8 SPI1_ReadWriteByte(u8 TxData)<br />
{<br />
u8 i;<br />
u8 temp=0;<br />
for(i=8;i>0;i--)<br />
{<br />
//MOSI准备数据位<br />
if(TxData&0x80)MOSI_H;<br />
else MOSI_L;<br />
TxData<<=1;<br />
<br />
//SCLK产生上升沿<br />
SCLK_H;<br />
__nop();<br />
__nop();<br />
__nop();<br />
<br />
//MISO读取收到的数据位,如果是1,那么temp最低位置1,数据位左移<br />
temp<<=1; <br />
if(MISO)temp++;<br />
<br />
//SCLK恢复为低电平,并保持一段时间<br />
SCLK_L;<br />
__nop();<br />
__nop();<br />
__nop();<br />
}<br />
return temp;<br />
}<br />
<div>
<br />
<br />
</div> |
|