STM32
直播中

杨云

7年用户 765经验值
私信 关注
[问答]

怎样使用USB转TTL模块来对STM32的处理信息进行输出呢

怎样使用USB转TTL模块来对STM32的处理信息进行输出呢?其结果怎样?

回帖(1)

王国花

2021-12-13 10:15:46
首先是实现的方案:
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
  #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("rn");         }         else if(distance>10000)         {                 UART1_SendString("Yes!there out of 1000!");                   //UART1_SendString("Yes!there is a  %d!",distance);                 UART1_SendString("rn");         }         else          {                 UART1_SendString("No_car");                 UART1_SendString("rn");          }          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 {
    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形成对应。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分