我是靠谱客的博主 发嗲过客,最近开发中收集的这篇文章主要介绍STM32笔记---USART3配置及收发数据,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前段时间某个项目需要多串口收发数据,因此尝试了一番,参考了正点原子官方例程,现在记录下
代码:
USART3.c中先添加头文件:

#include "sys.h"
#include "usart.h"	
#include <stdarg.h>
#include "stdio.h"	 	 
#include "string.h"

并定义:

//串口接收缓存区 	
u8 USART3_RX_BUF[USART3_MAX_RECV_LEN]; 				//接收缓冲,最大USART3_MAX_RECV_LEN个字节.
u8  USART3_TX_BUF[USART3_MAX_SEND_LEN]; 			//发送缓冲,最大USART3_MAX_SEND_LEN字节

USART3初始化:

void usart3_init(u32 bound){
	//GPIO端口配置
	USART_InitTypeDef USART_InitStructure;    
	NVIC_InitTypeDef NVIC_InitStructure;     
	GPIO_InitTypeDef GPIO_InitStructure;    
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); 
 	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);    

   // USART3_Rx (PB.11)       
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;    
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;    
   GPIO_Init(GPIOB, &GPIO_InitStructure);    

   // USART3_Tx (PB.10)   
   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;    
   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    
   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;    
   GPIO_Init(GPIOB, &GPIO_InitStructure);
   
   //USART3 NVIC配置    
   NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//抢占优先级0
   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
   NVIC_Init(&NVIC_InitStructure);    
   
   //USART3 初始化设置 
   USART_InitStructure.USART_BaudRate = bound;    
   USART_InitStructure.USART_WordLength = USART_WordLength_8b;    
   USART_InitStructure.USART_StopBits = USART_StopBits_1;    
   USART_InitStructure.USART_Parity = USART_Parity_No;    
   USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;    
   USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    


   //初始化 USART3     
   USART_Init(USART3, &USART_InitStructure);
  // 开启串口接收中断   
   USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);    
   // 使能USART3     
   USART_Cmd(USART3, ENABLE);         
}

USART3 printf函数:

//串口3,printf 函数
//确保一次发送数据不超过USART3_MAX_SEND_LEN字节
void u3_printf(char* fmt,...)  
{  
	u16 i,j; 
	va_list ap; 
	va_start(ap,fmt);
	vsprintf((char*)USART3_TX_BUF,fmt,ap);
	va_end(ap);
	i=strlen((const char*)USART3_TX_BUF);		//此次发送数据的长度
	for(j=0;j<i;j++)							//循环发送数据
	{
	  while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕   
		USART_SendData(USART3,USART3_TX_BUF[j]); 
	} 
}

USART3 中断函数:

void USART3_IRQHandler(void)
{
//your coding				 											 
}   

USART3 头文件:

#ifndef __USART_H
#define __USART_H	 
#include "sys.h"  
#define USART3_MAX_RECV_LEN		600					//最大接收缓存字节数
#define USART3_MAX_SEND_LEN		600					//最大发送缓存字节数
#define USART3_RX_EN 			1					//0,不接收;1,接收.

extern u8  USART3_RX_BUF[USART3_MAX_RECV_LEN]; 		//接收缓冲,最大USART3_MAX_RECV_LEN字节
extern u8  USART3_TX_BUF[USART3_MAX_SEND_LEN]; 		//发送缓冲,最大USART3_MAX_SEND_LEN字节
extern vu16 USART3_RX_STA;   						//接收数据状态

void usart3_init(u32 bound);				//串口3初始化 
void u3_printf(char* fmt,...);
#endif

最后

以上就是发嗲过客为你收集整理的STM32笔记---USART3配置及收发数据的全部内容,希望文章能够帮你解决STM32笔记---USART3配置及收发数据所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(55)

评论列表共有 0 条评论

立即
投稿
返回
顶部