STM32F407串口通信

本文是基于江科大B站视频编写,参考各种资料进行学习。
STM32F407串口通信_第1张图片

1、USART串口协议

STM32F407串口通信_第2张图片
STM32F407串口通信_第3张图片
硬件电路(接线)
STM32F407串口通信_第4张图片
STM32F407串口通信_第5张图片
STM32F407串口通信_第6张图片
STM32F407串口通信_第7张图片

2、USART串口外设

STM32F407串口通信_第8张图片
常用波特率为9600、115200
STM32F407串口通信_第9张图片
STM32F407串口通信_第10张图片

必须对应特定引脚,才能实现通信,如果引脚冲突,看看有没有重映射来改变引脚。
STM32F407串口通信_第11张图片
STM32F407串口通信_第12张图片
STM32F407串口通信_第13张图片
STM32F407串口通信_第14张图片
STM32F407串口通信_第15张图片
fpclk频率是指SPI所在的APB总线频率,APB1为fpclk1,APB2为fpclk2。
STM32F407串口通信_第16张图片

3、串口发送程序

(1)接线

STM32F407串口通信_第17张图片
为什么选用PA9、10这两个引脚,如下图:
STM32F407串口通信_第18张图片
实物:
STM32F407串口通信_第19张图片

(2)代码

(a)main.c

#include "stm32f4xx.h"
#include "serial.h"

int main(void)
{ 
	SERIAL_Init();
	
    Serial_SendByte(0x41);//Serial_SendByte('A');//一样的效果
    
    while(1);
}

(b)serial.c

#include "stm32f4xx.h"
#include "serial.h"

void SERIAL_Init(void)
{
	  //GPIO端口设置
  GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟
 
	//串口1对应引脚复用映射
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9复用为USART1
	GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10复用为USART1
	
	//USART1端口配置
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//速度50MHz
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
	GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9,PA10

   //USART1 初始化设置
	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_Cmd(USART1, ENABLE);  //使能串口1 
	
} 

void Serial_SendByte(u8 Byte)
{
	USART_SendData(USART1, Byte);
	while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
}


(c)serial.h

#ifndef __SERIAL_H 
#define __SERIAL_H 


#include "sys.h" 
//serial communication 端口定义
#define bound 9600;//设置串口波特率

void SERIAL_Init(void);
void Serial_SendByte(u8 Byte);

#endif  

(3)实物效果

A的ASCII码为41,复位一次STM32发送一个A。

4、串口发送&接收程序

5、USART串口数据包

STM32F407串口通信_第20张图片
STM32F407串口通信_第21张图片
STM32F407串口通信_第22张图片
STM32F407串口通信_第23张图片
程序现象,如下:
STM32F407串口通信_第24张图片

你可能感兴趣的:(STM32单片机,stm32,单片机,嵌入式硬件)