STM32F103C8T6配合 US-100的测试(源码+接线定义)

本文详细介绍了一种利用STM32F103C8T6微控制器、USB转TTL模块和US-100超声波模块实现的距离测量项目。通过JTAG接口下载程序,通过串口监控数据,展示了如何配置GPIO和处理接线问题。关键在于理解GPIO分配并掌握基本通信原理。
摘要由CSDN通过智能技术生成

首先是实现的方案:
STM32F103C8T6+USB转TTL模块+US-100超声波模块
接线的方案如下:
在这里插入图片描述
2.在下载的时候要使用,JTAG 的SW的模式,因为接线简单。只需要4根线。
使用USB转TTL模块来对STM32的处理信息进行输出。
3.STM32的源如下:
/**********************************************************************************
STM32F103C8T6

  • Ó²¼þÁ¬½Ó˵Ã÷
    ʹÓõ¥Æ¬´®¿Ú2ÓëGPRSÄ£¿éͨÐÅ ×¢£ºÊ¹Óô®¿Ú2¿ÉÒÔ±ÜÃâÏÂÔغÍͨÐŲ»»á³åÍ»
    STM32 GPRSÄ£¿é
    ´ò°å×Ó½ÓÏß·½·¨: mini°å×Ó½ÓÏß·½·¨:
    PA3 (RXD2)->ECho PA3 (RXD2)->U_TX
    PA2 (TXD2)->Trig PA2 (TXD2)->U_RX
    GND ->GND GND ->GND

    PA9(TXD1)—>µ÷ÊÔÐÅÏ¢¶Ë¿Ú
    PA10(RXD1)–>µ÷ÊÔÐÅÏ¢¶Ë¿Ú

**********************************************************************************/
#include “stm32f10x.h”
#include “usart.h”
//#include “Led.h”
#include “SysTick.h”
#include “timer.h”
#include “string.h”
#include “key.h”
#include “GA6_module_errors.h”
#include <stdio.h>

#define uint unsigned int
#define uchar unsigned char

#define Buf2_Max 200 //´®¿Ú2»º´æ³¤¶È
/±¾µØº¯ÊýÉùÃ÷**/
u8 First_Int = 0;
int distance;
uchar Uart2_Buf[Buf2_Max];//´®¿Ú2½ÓÊÕ»º´æ
uchar cc,bb;
void DATA(void);
void CLR_Buf(void);
int main(void)
{
SysTick_Init_Config(); //ϵͳµÎ´ðʱÖÓ³õʼ»¯
//GPIO_Config(); //GPIO³õʼ»¯
//Key_GPIO_Config();
USART1_Init_Config(9600); //´®¿Ú1³õʼ»¯£¬ÉèÖò¨ÌØÂÊ£¬ÓÃÀ´µ÷ÊÔ£¬ÏÔʾ³¬Éù²¨·µ»ØµÄÖµPA10(RX),PA9(TX)
USART2_Init_Config(9600); //´®¿Ú2³õʼ»¯£¬ÉèÖò¨ÌØÂÊ£¬ÓÃÀ´Ïò³¬Éù²¨·¢ËÍ¿ªÊ¼²â¾àÐźÅ0x55,PA2(TX),PA3(RX)
Delay_nS(1);

while(1)
{  
		DATA();
 //UART1_SendString(&Uart2_Buf[0]);
	 cc=Uart2_Buf[0];   //½ÓÊÕ¾àÀëµÄ¸ß8λ
	 bb=Uart2_Buf[1];   //½ÓÊÕ¾àÀëµÄµÍ8λ
	 //USART_SendData(USART1,cc);
	 distance = (int) ((cc<<8)|bb);
	 //USART_SendData(USART1,distance);
  // printf("distance:%d cm",distance);
	  
		if(distance>0&&distance < 1000)
	{
		UART1_SendString("Yes!there is in 1000!");	
	  //UART1_SendString("Yes!there is a  %d!",distance);
		UART1_SendString("\r\n");
	}
	else if(distance>10000)
	{
		UART1_SendString("Yes!there out of 1000!");	
	  //UART1_SendString("Yes!there is a  %d!",distance);
		UART1_SendString("\r\n");
	}
	else 
	{
		UART1_SendString("No_car");
		UART1_SendString("\r\n");
	 }
	 CLR_Buf();
	 delay_ms(1);

}
}

/*********************************

·¢ËÍ16½øÖÆÊý

************************************/

void DATA(void)
{
u8 DATA_1=0x55;
while((USART2->SR&0x0080)==0);
USART2->DR=DATA_1;
}

/*******************************************************************************

  • º¯ÊýÃû : CLR_Buf
  • ÃèÊö : Çå³ý´®¿Ú2»º´æÊý¾Ý
  • ÊäÈë :
  • Êä³ö :
  • ·µ»Ø :
  • ×¢Òâ :
    *******************************************************************************/
    void CLR_Buf(void)
    {
    u16 k;
    for(k=0;k<Buf2_Max;k++) //½«»º´æÄÚÈÝÇåÁã
    {
    Uart2_Buf[k] = 0x00;
    }
    First_Int = 0; //½ÓÊÕ×Ö·û´®µÄÆðʼ´æ´¢Î»ÖÃ
    }

/*******************************************************************************

  • º¯ÊýÃû : USART2_IRQHandler
  • ÃèÊö : ´®¿Ú1ÖжϷþÎñ³ÌÐò
  • ÊäÈë : ÎÞ
  • ·µ»Ø : ÎÞ
  • ˵Ã÷ :
    *******************************************************************************/
    void USART2_IRQHandler(void)
    {
    u8 Res=0;
    Res =USART_ReceiveData(USART2);
    Uart2_Buf[First_Int] = Res; //½«½ÓÊÕµ½µÄ×Ö·û´®´æµ½»º´æÖÐ
    First_Int++; //»º´æÖ¸ÕëÏòºóÒƶ¯
    if(First_Int > Buf2_Max) //Èç¹û»º´æÂú,½«»º´æÖ¸ÕëÖ¸Ïò»º´æµÄÊ×µØÖ·
    {
    First_Int = 0;
    }

}

主要是要设置对接线的PIN口,然后在程序里面也要正确的设置对,这样的话

4.项目编译成功之后,下载,再将USB转TTL模块查找电脑的USB口上,使用串口程序,进行显示,实际的结果如下:
在这里插入图片描述
在接线的时候可能有接触不了的地方,所以会有数据的跳变,但是基本的实验目的已经实现。
总结下经验,学习STM32 要多了解GPIO的分配,例如代码里的这行。
在这里插入图片描述
要与A9和A10形成对应。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值