US-100超声波(测距与测温)基于stm32f103源码------方式串口通信(测距与测温)

///======================US100.c=================================

#include "US100.h"

#include "systick.h"
#include "usart.h"


extern char RxCounter2,RxBuffer2[100];


char buff[100] = {0};
int tem = 0;
int distance = 0;
int index = 0;
void clear_buff2()//串口2缓存清理函数
{
	int i;
	for(i=0;i<100;i++)
	RxBuffer2[i]=0;
	RxCounter2=0;
	index=0;
}
void readTembuff()//读取温度与距离 :周期36+55+5=96ms;频率约等于10hz
{
	UART2_send_byte(0x55);//发送测距命令
	delay_ms(36);
	delay_ms(55);
	UART2_send_byte(0x50);//发送测温命令
	delay_ms(5);
	distance = RxBuffer2[0]*256+RxBuffer2[1];
	tem = RxBuffer2[2]-45;
	clear_buff2();
}

==============================USART.c=====================================


#include "usart.h"	  
#include "stdio.h"
#include "string.h"
#include "timer.h"

void UART2_send_byte(char data)
{
	while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
	USART_SendData(USART2, data);
}

char RxCounter2,RxBuffer2[100];    


extern u8 Timeout2;


void uart2_init()
{
	GPIO_InitTypeDef GPIO_InitStructure;	//?????????,?????GPIO


	USART_InitTypeDef  USART_InitStructure;	  //???????


	NVIC_InitTypeDef NVIC_InitStructure;//???????
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);	 //????
	
	/*  ??GPIO????IO? usart2*/
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//TX			   //????PA2
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;	    //??????
	GPIO_Init(GPIOA,&GPIO_InitStructure);  /* ???????IO */
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;//RX			 //????PA3
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;		  //????
	GPIO_Init(GPIOA,&GPIO_InitStructure); /* ???GPIO */

	USART_InitStructure.USART_BaudRate=9600;   //??????9600	//???
	USART_InitStructure.USART_WordLength=USART_WordLength_8b;		//???8?
	USART_InitStructure.USART_StopBits=USART_StopBits_1;			//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(USART2,&USART_InitStructure);	/* ???USART2 */
	USART_Cmd(USART2, ENABLE);		   /* ??USART2 */
	USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//?????????USART?? ????
	USART_ClearFlag(USART2,USART_FLAG_TC);//??USARTx???????

	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);    
	NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; 	   //??USART2?????
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; 	 //??????0
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; 			//??????0
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 			 //??
	NVIC_Init(&NVIC_InitStructure);
}

void Uart2_SendStr(char*SendBuf)
{
	while(*SendBuf)
	{
	  while((USART2->SR&0X40)==0)
		{
		}//µÈ´ý·¢ËÍÍê³É
    USART2->DR = (u8) *SendBuf; 
		SendBuf++;
	}
}

void USART2_IRQHandler(void)                	
{
	if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)  //½ÓÊÕÖжϣ¬¿ÉÒÔÀ©Õ¹À´¿ØÖÆ
	{
		TIM_Cmd(TIM4, ENABLE);
		Timeout2=0;
		RxBuffer2[RxCounter2++] =USART_ReceiveData(USART2);//½ÓÊÕÄ£¿éµÄÊý¾Ý
	} 
} 


#ifndef __US100_H_
#define __US100_H_	 

void readTembuff(void);

#endif

#ifndef __USART_H
#define __USART_H
#include "stdio.h"	
#include "stm32f10x.h"
#define u8 int8_t
#define u16 int16_t
#define u32 int32_t

void uart2_init();

void UART2_send_byte(char data);

#endif








===================================================================
  • 7
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值