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

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

复制代码
1
2
3
4
5
6
#include "sys.h" #include "usart.h" #include <stdarg.h> #include "stdio.h" #include "string.h"

并定义:

复制代码
1
2
3
4
//串口接收缓存区 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初始化:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
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函数:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//串口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 中断函数:

复制代码
1
2
3
4
5
void USART3_IRQHandler(void) { //your coding }

USART3 头文件:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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配置及收发数据内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部