基于STM32单片机的倒车雷达proteus仿真

硬件设计

(末尾附文件)

仿真图如下所示:

程序设计

#include "stm32f4xx.h"                  // Device header
#include "stm32f4xx_gpio.h"             // Keil::Device:StdPeriph Drivers:GPIO
#include "stm32f4xx_rcc.h"              // Keil::Device:StdPeriph Drivers:RCC
#include "stm32f4xx_syscfg.h"           // Keil::Device:StdPeriph Drivers:SYSCFG
#include "stm32f4xx_usart.h"            // Keil::Device:StdPeriph Drivers:USART
#include "misc.h"

#include "Systick.h"				//精准延时函数的头文件
#include "SR04.h"
#include 

int fputc(int ch, FILE *f)	//函数重定向
{
	USART_SendData(USART1, ch);
	while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
	
	return ch;
}

void Usart1_SendString(char *str)	//自定义一个字符串发送函数
{
	char *p = str;
	while(*p != '\0')
	{
		USART_SendData(USART1, *p);
		while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
		p++;//偏移字符串
	}		
}
void BUZZ_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;	//GPIO初始化结构体变量
	
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
	
	//2,设置PD0工作模式 ==》推挽输出
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;	//输出模式
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;	//推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 ;		//引脚号
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;	//快速 ,速度越快,性能越强,功耗越大
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;	//上拉
	
	GPIO_Init(GPIOD, &GPIO_InitStruct);
}
void Led_Init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;	//GPIO初始化结构体变量
	
	//1,打开A组GPIO时钟
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
	
	//2,设置PA0工作模式 ==》推挽输出
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;	//输出模式
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;	//推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1|GPIO_Pin_2| GPIO_Pin_3;		//引脚号
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;	//快速 ,速度越快,性能越强,功耗越大
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;	//上拉
	
	GPIO_Init(GPIOA, &GPIO_InitStruct);
}

void Usart1_Init(void)	//串口初始化函数
{	
	GPIO_InitTypeDef GPIO_InitStruct;	//GPIO初始化结构体变量
	USART_InitTypeDef USART_InitStruct;
	NVIC_InitTypeDef NVIC_InitStruct;
	
	//1)使能串口时钟 --》串口1的时钟 
		// RCC_APB2PeriphClockCmd(RCC_APB2Periph_USARTx, ENABLE)
	 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	
	//2)开启对应引脚时钟 --》PA9,PA10 --> RCC_AHB1PeriphClockCmd()
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
	
	//3)设置PA9,PA10为复用推挽功能
		//将PA9,PA10设置为复用功能引脚,作为串口1的发送接收引脚
	
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;	//输出模式
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;	//推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10 ;		//引脚号
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;	//快速 ,速度越快,性能越强,功耗越大
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;	//上拉
	
	GPIO_Init(GPIOA, &GPIO_InitStruct);
	
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_USART1);
	
	//4)使用函数USART_Init()初始化串口功能
	USART_InitStruct.USART_BaudRate = 9600;		//波特率
	USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None ;	//硬件控制流
	USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;	//发送和接受
	USART_InitStruct.USART_Parity = USART_Parity_No;	//校验位
	USART_InitStruct.USART_StopBits = USART_StopBits_1;	//停止位
	USART_InitStruct.USART_WordLength = USART_WordLength_8b;	//字长 8位
	
	USART_Init(USART1, &USART_InitStruct);
	
	//5,配置串口1 NVIC中断,中断分组,开启串口中断
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	
	NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;	//串口1中断通道
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
	
	NVIC_Init(&NVIC_InitStruct);
	
	//6,打开串口
	 USART_Cmd(USART1, ENABLE);
	 
	//7,使能串口中断
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

}

void USART1_IRQHandler(void)	//串口1中断执行函数,每次接收到1字节就产生一次中断
{
	uint8_t d; //定义一个变量接受数据
	
	//判断串口接受的数据标志位
	if( USART_GetITStatus(USART1, USART_IT_RXNE) == SET)
	{
		//如果有数据到达,那我就接受数据
		d = USART_ReceiveData(USART1);
		
		//接收到数据之后,通过串口1 的发送引脚将数据发送出去 TXD,如果有数据到达,可以通过串口助手查看内容
		USART_SendData(USART1, d);
		
		//等待串口发送完成
		while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
		
	}
}


.

链接:https://pan.baidu.com/s/1OOKNtRG_NoQyFmW-VWKeAw
提取码:9c9h

.

你可能感兴趣的:(基于STM32单片机的倒车雷达proteus仿真)