STM32串口通讯
一、串口通信简介
1.串行通讯与并行通讯
串行通讯:设备之间通过少量数据信号线,地线以及控制信号线,按数据形式一位一位地传输数据。
并行通讯:设备之间通过信号线,同时传输多个数据位的数据。
串行通讯的通讯距离和抗干扰能力要优于并行通讯,并且成本更低,而并行通讯的传输速率要优于串行通讯。
2.全双工,半双工和单工通讯
全双工通讯:设备之间可以同时收发数据。
半双工通讯:设备之间可以收发数据,但是不能够同时进行。
单工通讯:单方向的进行数据的发送和接收,即一个设备要么作为发送设备,要么作为接收设备。
3.同步通讯和异步通讯
同步通讯:收发双方使用同一个信号线作为时钟信号,在时钟信号的驱动下双方进行协调,同步数据。
异步通讯:不采用时钟信号进行数据同步,而是在数据信号中穿插一些同步用的信号位来实现同步。
二、使用stm32芯片进行串口通信
要求:
(1)设置波特率为115200,1位停止位,无校验位。
(2)STM32系统给上位机(win10)连续发送“hello windows!”,上位机接收程序可以使用“串口调试助手“,也可自己编程。
(3)当上位机给stm32发送“Stop,stm32”后,stm32停止发送。
1.这程序和我们的要求还不符合,我们还需要改一下
具体改一下main函数,中断函数和发送函数。具体如下
main函数 修改如下
#include "stm32f10x.h"
void Delay_ms(volatile unsigned int t)
{
unsigned int i,n;
for(n=0;n<t;n++)
for(i=0;i<800;i++);
}
int main(void)
{
User_USART_GPIO_Config();
User_NVIC_Config();
User_USART_Config();
User_UART_Send_String(USART1, "abcdefg!\n");
while(1)
{
User_UART_Send_String(USART1, "hello windows!\n");
Delay_ms(5000);
}
}
中断函数修改如下:
void SysTick_Handler(void)
{
}
//中断服务函数,前面在User_USART.c void User_USART_Config(void)函数中
//USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);使能了数据接收中断,所以
//将处理接收数据时的中断服务
int i=0;
uint8_t a[11];
void USART1_IRQHandler(void)
{
//uint8_t temp;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
a[i++