嵌入式STM32学习——串口USART 2.0(串口发送数据)
本文介绍了如何通过STM32的USART串口实现数据发送功能。首先,定义了USART的结构体,包括波特率、数据位长度、停止位、校验位等参数。接着,详细列出了与USART相关的库函数,如初始化、配置、发送和接收数据等。在软件流程设计中,首先初始化系统时钟和GPIO,然后配置串口引脚和外设。实验代码展示了如何初始化USART并通过USART_SendData函数发送字符'a'。最后,实验结果验证了串口
·
实现串口发送
库函数实现串口发送
串口USART结构体:
typedef struct
{
uint32_t USART_BaudRate;
uint16_t USART_WordLength;
uint16_t USART_StopBits;
uint16_t USART_Parity;
uint16_t USART_Mode;
uint16_t USART_HardwareFlowControl;
} USART_InitTypeDef;
串口USART相关库函数:
void USART_DeInit(USART_TypeDef* USARTx);
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef*
USART_InitStruct);
void USART_StructInit(USART_InitTypeDef* USART_InitStruct);
void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef*
USART_ClockInitStruct);
void USART_ClockStructInit(USART_ClockInitTypeDef*
USART_ClockInitStruct);
void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT,
FunctionalState NewState);
void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq,
FunctionalState NewState);
void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address);
void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp);
void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState
NewState);
void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t
USART_LINBreakDetectLength);
void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState);
void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
void USART_SendBreak(USART_TypeDef* USARTx);
void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t
USART_GuardTime);
void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t
USART_Prescaler);
void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState
NewState);
void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState
NewState);
void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState
NewState);
void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState
NewState);
void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState
NewState);
void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode);
void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState);
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t
USART_FLAG);
void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t
USART_IT);
软件流程设计
初始化系统
初始化GPIO、串口外设时钟
初始化串口引脚
初始化串口外设
串口发送
实验代码:(用单片机给发出a)
usart.h
#ifndef USART_H_
#define USART_H_
void my_usart_init(void);
#endif
usart.c
#include"stm32f10x.h"
#include"usart.h"
void my_usart_init(void)
{
GPIO_InitTypeDef GPIOInitstruct;
USART_InitTypeDef Usart_initstruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE);
//A9
GPIOInitstruct.GPIO_Pin = GPIO_Pin_9;
GPIOInitstruct.GPIO_Mode = GPIO_Mode_AF_PP;
GPIOInitstruct.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_Init(GPIOA,&GPIOInitstruct);
//A10
GPIOInitstruct.GPIO_Pin =GPIO_Pin_10;
GPIOInitstruct.GPIO_Mode =GPIO_Mode_IPU;
GPIO_Init(GPIOA,&GPIOInitstruct);
//A10
Usart_initstruct.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
Usart_initstruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
Usart_initstruct.USART_BaudRate = 115200;
Usart_initstruct.USART_Parity = USART_Parity_No;
Usart_initstruct.USART_StopBits = USART_StopBits_1;
Usart_initstruct.USART_WordLength = USART_WordLength_8b;
USART_Init(USART1,&Usart_initstruct);
USART_Cmd(USART1,ENABLE); //使能串口外设
}
main.c
#include "stm32f10x.h"
#include "main.h"
#include "led.h"
#include "bear.h"
#include "key.h"
#include "shake.h"
#include "usart.h"
void delay(uint16_t time)
{
uint16_t i=0;
while(time--)
{
i =12000;
while(i--);
}
}
int main()
{
my_usart_init();
while(1)
{
USART_SendData(USART1,'a'); //向串口发送a
}
}
实验结果

字符串和字符的输出
嵌入式STM32学习——串口USART 2.1(串口发送字符串和字符)-CSDN博客
printf函数发送
嵌入式STM32学习——串口USART 2.0(printf重定义及串口发送)-CSDN博客
串口中断接收(串口发送数据,stm32再返回输入)
嵌入式STM32学习——串口USART 2.2(串口中断接收)-CSDN博客
通过串口发送数据控制LED灯
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)