STM32 TTL
怎样使用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形成对应。
首先是实现的方案:
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形成对应。
举报
更多回帖