STM32串口通讯

本文详细介绍了STM32串口通信的原理和实践,包括串行通讯类型、全双工与半双工的区别,以及同步和异步通讯。通过实例展示了如何设置STM32进行串口通信,以及如何通过编程控制发送和接收。同时,文章还探讨了C语言中的全局变量、局部变量、堆和栈的概念,解释了各自的工作原理和内存分配特点。
摘要由CSDN通过智能技术生成

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++
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值