串口采用控制器,IIC与spi采用了模拟时序
stm32单片机源程序如下:
- #include "spi.h"
- #include "uart.h"
- #include "stdio.h"
- #include "delay.h"
- void SPI1_Init(void)
- {
- RCC ->AHBENR |=0X01<<18;
- RCC ->APB2ENR |=0x01<<12;
-
- //SCK(pb3) MOSI(pb5)配置为普通功能推挽输出
- //端口模式设置
- //模式----通用输出模式(01)
- GPIOB->MODER &=~(0x03<<6 |0x03<<10);
- GPIOB->MODER |=0X01<<6 | 0X01<<10;
- //输出类型----推挽
- GPIOB->OTYPER &= ~(0X01<<3 | 0X01<<5);
- //输出速度----100M
- GPIOB->OSPEEDR |=0x03<<6 | 0x03<<10;
- //上下拉-----无上拉或下拉
- GPIOB->PUPDR &=~(0x03<<6 |0x03<<10);
-
- //MISO(pb4) 配置为浮空输入
- GPIOB->MODER &=~(0X03<<8); //pB4为输入模式
- GPIOB->PUPDR &=~(0X03<<8); //浮空输入
-
- SCK_0; //SCK空闲电平为低
- }
- //spi读写函数--模式0
- //_data:待发送的数据,如果是接收模式,发送的数据则应该是0xff
- //返回值:接收到的数据。如果是发送模式,返回值可以丢弃
- u8 SPI1_ReadWriteByte(u8 _data)
- {
- u8 i;
- for(i=0;i<8;i++)
- {
-
- if(_data&0x80) //高位在前
- {
- MOSI_1;
- }
- else
- {
- MOSI_0;
- }
- SCK_1;
- _data=_data<<1;
- delay_us(2);
-
- if(GPIOB ->IDR&0x01<<4) //判断收到的数据
- {
- _data=_data | 0X01;
- }
- SCK_0;
-
- delay_us(2);
- }
- return _data;
- }
复制代码
所有资料51hei提供下载:
串口spii2c.zip
(4.63 KB, 下载次数: 156)
|