#一、串口介绍
#二、项目所需硬件
##1.USB转串口模块
#三、项目代码
一、串口介绍
USART:(Universal Synchronous/Asynchronous Receiver/Transmitter)
通用同步/异步串行接收/发送器
USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。
1、单工(Simplex)
单工通信只支持信号在一个方向上传输(正向或反向),任何时候不能改变信号的传输方向。
2、半双工(Half Duplex)
半双工通信允许信号在两个方向上传输,但某一时刻只允许信号在一个信道上单向传输。半双工通信实际上是一种可切换方向的单工通信。
3、全双工(Full Duplex)
全双工通信允许数据同时在两个方向上传输,即有两个信道,因此允许同时进行双向传输。全双工通信是两个单工通信方式的结合,要求收发双方都有独立的接收和发送能力。
TTL电平:数字芯片的电平,单片机。(电压范围:0V~5V)
232电平:电脑串口的电平,负逻辑。(电压范围:-15V~15V)
1.USB转串口模块主要应用于电脑与其他设备的连接,使用的时候电脑需要安装电平转换芯片驱动。
USB转串口模块示意图,如图。
2.原生串口通信主要用于设备与传感器的连接,不需要经过电平转换芯片直接用TTL电平通信,如GPS模块,串口转WIFI模块(ESP8266),蓝牙模块(HC05)
3.串口数据包的基本组成:起始位、有效数据位,校验位和停止位
4.串口数据包校验位
5.**USART:**通用同步异步收发器
6.USART引脚位置:
PA10/USART1_RX
PA9/USART1_TX
PA8/USART1_CLK
7.串口的结构体配置
8.串口初始化函数
二、项目所需硬件
1、STM32F103C8T6开发板
串口的配置:
1.电源——VCC3.3V
2.接地——GND
3.输出端——TX(PA9)
4.输入端——RX(PA10)
2、USB转串口模块
接线配置:
1.电源:3.3V——3.3V
2.接地:GND——GND
3.输出:TXD——RX(PA10)
4.输入:RXD——TX(PA9)
三、项目代码
1.main.c
#include "stm32f10x.h"
#include "main.h"
#include "LED.h"
#include "usart.h"
#include "relay.h"
#include "shake.h"
#include "exti.h"
void delay(uint16_t time)
{
uint16_t i=0;
while(time--)
{
i=12000;
while(i--);
}
}
int main()
{
usart_init();
LED_Init();
GPIO_SetBits(GPIOA, GPIO_Pin_1);
while(1)
{
}
}
void USART1_IRQHandler(void)
{
char Temp;
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
Temp=USART_ReceiveData(USART1);
if(Temp=='O')
{
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
USARTSendStr(USART1, "LED is OK");
}
if(Temp=='C')
{
GPIO_SetBits(GPIOA, GPIO_Pin_1);
USARTSendStr(USART1, "LED is Down");
}
}
}
USART.C
#include "stm32f10x.h"
#include "usart.h"
#include <stdio.h>
void usart_init(void)
{
GPIO_InitTypeDef gpioinstructure;
USART_InitTypeDef usartinstructure;
NVIC_InitTypeDef nvicinstructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
gpioinstructure.GPIO_Mode = GPIO_Mode_AF_PP;
gpioinstructure.GPIO_Pin = GPIO_Pin_9 ;
gpioinstructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&gpioinstructure);
gpioinstructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
gpioinstructure.GPIO_Pin = GPIO_Pin_10;
GPIO_Init(GPIOA,&gpioinstructure);
usartinstructure.USART_BaudRate = 115200;
usartinstructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
usartinstructure.USART_Mode = USART_Mode_Rx|USART_Mode_Tx ;
usartinstructure.USART_Parity = USART_Parity_No;
usartinstructure.USART_StopBits = USART_StopBits_1;
usartinstructure.USART_WordLength = USART_WordLength_8b;
USART_Init(USART1,&usartinstructure);
USART_Cmd(USART1,ENABLE);
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
nvicinstructure.NVIC_IRQChannel = USART1_IRQn;
nvicinstructure.NVIC_IRQChannelCmd = ENABLE;
nvicinstructure.NVIC_IRQChannelPreemptionPriority = 1;
nvicinstructure.NVIC_IRQChannelSubPriority = 1;
NVIC_Init(&nvicinstructure);
}
void USARTSendByte(USART_TypeDef* USARTx, uint16_t Data)
{
USART_SendData(USARTx, Data);
while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==RESET);
}
void USARTSendStr(USART_TypeDef* USARTx, char *str)
{
uint16_t i=0;
do
{
USARTSendByte(USARTx,*(str+i));
i++;
}while(*(str+i)!='\0');
while(USART_GetFlagStatus(USARTx,USART_FLAG_TC)==RESET);
}
int fputc(int ch,FILE *f)
{
USART_SendData(USART1,(uint8_t)ch);
while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
return (ch);
}
int fgetc(FILE *f)
{
while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==RESET);
return (int)USART_ReceiveData(USART1);
}
usart.h
#include "stm32f10x.h"
#include <stdio.h>
void usart_init(void);
void USARTSendByte(USART_TypeDef* USARTx, uint16_t Data);
void USARTSendStr(USART_TypeDef* USARTx, char *str);
led.c
#include "LED.h"
#include "stm32f10x.h"
void LED_Init(void)
{
GPIO_InitTypeDef LED_Init;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
LED_Init.GPIO_Mode = GPIO_Mode_Out_PP;
LED_Init.GPIO_Pin = GPIO_Pin_1;
LED_Init.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA, &LED_Init);
}
led.h
```c
#include "stm32f10x.h"
void LED_Init(void);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)