RCC\_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA时钟
//USART1\_TX GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO\_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
//USART1\_RX GPIOA.10初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入
GPIO\_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10
//Usart1 NVIC 配置
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC\_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
//USART 初始化设置
USART_InitStructure.USART_BaudRate = bound;//串口波特率
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
USART\_Init(USART1, &USART_InitStructure); //初始化串口1
USART\_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断
USART\_Cmd(USART1, ENABLE); //使能串口1
}
/*********************************************************************************** STM32F1 USART1中断服务函数 ************************************************************************************/ void USART1_IRQHandler(void) //串口1中断服务程序 { unsigned char USART1_Res; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾) { USART1_Res =USART_ReceiveData(USART1); //读取接收到的数据 }
### 2.IIC
IIC总线(Inter-Integrated Circuit)即集成电路总线,包含SDA(数据线)和SCL(时钟线),是一种简单、双向、二线制、同步串行总线。IIC总线是一个多向控制总线,多个器件(从机)可以同时挂载到一个主机控制的一条总线上。每个连接在总线上的设备都是通过唯一的地址和其他器件通信,主机和从机的角色可互换,可以根据谁控制时钟线(即控制SCL的电平高低变换)谁就是主设备 。主机就是负责整个系统的任务协调与分配,从机一般是通过接收主机的指令从而完成某些特定的任务,主机和从机之间通过总线连接,进行数据通讯。IIC的时序简化图如下,主要包含空闲段、启动信号(START)、数据位传输(DATA)、应答信号(ACK)、非应答信号(NACK)和停止信号(STOP),接下将进一步说明这几种信号。

**启动信号(START)**:在SCL保持高电平期间,SDA由高电平被拉低。由主机发出。

//产生IIC起始信号 void MPU_IIC_Start(void) { MPU_SDA_OUT(); //配置SDA为输出模式 MPU_IIC_SDA=1; MPU_IIC_SCL=1; MPU_IIC_Delay(); MPU_IIC_SDA=0; //SDA拉低 MPU_IIC_Delay(); MPU_IIC_SCL=0; //钳住I2C总线,准备发送或接收数据 }
**数据位传输(DATA)**:在SCL保持高电平期间,SDA上的电平保持稳定,低电平为数据0、高电平为数据1。数据信号可由主机或从机发出。

//IIC发送一个字节
void MPU_IIC_Send_Byte(u8 txd)
{
u8 t;
MPU_SDA_OUT();
MPU_IIC_SCL=0;//拉低时钟开始数据传输
for(t=0;t<8;t++)
{
MPU_IIC_SDA=(txd&0x80)>>7;//SDA根据txd发送拉高/拉低
txd<<=1;
MPU_IIC_SCL=1; //SCL拉高
MPU_IIC_Delay(); //保持2us
MPU_IIC_SCL=0; //SCL拉低
MPU_IIC_Delay();
}
}
**应答信号(ACK)**:在SCL保持高电平期间,SDA保持低电平。IIC总线上所有数据都是以8位字节传送的,发送器每发送一个字节,就在第9个时钟脉冲期间释放SDA(高电平),由接收机机反馈一个应答信号(ACK)。

//产生ACK应答 void MPU_IIC_Ack(void) { MPU_IIC_SCL=0; MPU_SDA_OUT(); MPU_IIC_SDA=0; MPU_IIC_Delay(); MPU_IIC_SCL=1; MPU_IIC_Delay(); MPU_IIC_SCL=0; }
**非应答信号(NACK)**:在SCL保持高电平期间,SDA保持高电平。如果接收器是主机,则它在收到最后一个字节后,发送一个NACK,通知被控器结束数据发送,并释放SDA(高电平),以便主控器发送一个STOP。

//产生NACK非应答 void MPU_IIC_NAck(void) { MPU_IIC_SCL=0; MPU_SDA_OUT(); MPU_IIC_SDA=1; MPU_IIC_Delay(); MPU_IIC_SCL=1; MPU_IIC_Delay(); MPU_IIC_SCL=0; }
**停止信号(STOP)**:在SCL保持高电平时间,SDA由低电平被释放(拉高)。由主机发出。

//产生IIC停止信号
void MPU_IIC_Stop(void)
{
MPU_SDA_OUT();//sda线输出
MPU_IIC_SCL=0;
MPU_IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
MPU_IIC_Delay();
MPU_IIC_SCL=1;
MPU_IIC_SDA=1;//发送I2C总线结束信号
MPU_IIC_Delay();
}
IIC是半双工的通信,在介绍完时序之后,接下就是向从机读数据和写数据的步骤了。
**主机向从机写数据步骤**
1. 主机发起一个启动信号(START)。
2. 主机发送7bit从机地址+1bit读写选择位,1表示读、0表示写。
3. 从机产生应答信号(ACK)。
4. 主机发送8bit从机寄存器地址。
5. 从机产生应答信号(ACK)。
6. 主机发送一个字节数据。
7. 从机产生应答信号(ACK)。
8. 主机发送一个停止信号(STOP)。
**主机从从机读数据步骤**
1. 主机发送一个启动信号(START)。
2. 主机发送7bit从机地址+1bit读写选择位,1表示读、0表示写。
3. 从机产生一个应答信号(ACK)。
4. 主机发送8bit从机寄存器地址。
5. 从机产生一个应答信号。
6. 主机再次发送一个启动信号(START)。
7. 主机再次发送7bit从机地址+1bit读写选择位,1表示读、0表示写。
8. 从机产生一个应答信号(START)。
9. 主机读取一个字节数据。
10. 主机产生一个非应答信号(NACK)。
11. 主机产生一个停止信号(STOP)。
### 3.SPI


**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://gitee.com/vip204888)**