嵌入式STM32学习——串口USART 2.1(串口发送字符串和字符)
因为标准库中没有直接输出字符串的函数,因此便需要我们自己创建一个直接输出字符串的函数。
usart.h
#ifndef USART_H_
#define USART_H_void my_usart_init(void);void My_Usart_Send_Byte( USART_TypeDef* USARTx, uint16_t Data);void My_Usart_Send_Sting( USART_TypeDef* USARTx, char * string);#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);//A9GPIOInitstruct.GPIO_Pin = GPIO_Pin_9;GPIOInitstruct.GPIO_Mode = GPIO_Mode_AF_PP;GPIOInitstruct.GPIO_Speed = GPIO_Speed_10MHz;GPIO_Init(GPIOA,&GPIOInitstruct);//A10GPIOInitstruct.GPIO_Pin =GPIO_Pin_10;GPIOInitstruct.GPIO_Mode =GPIO_Mode_IPU;GPIO_Init(GPIOA,&GPIOInitstruct);//A10Usart_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); //使能串口外设 }
//字符输出函数
void My_Usart_Send_Byte(USART_TypeDef* USARTx, uint16_t Data)
{USART_SendData(USARTx, Data);while( USART_GetFlagStatus( USARTx, USART_FLAG_TXE) == RESET);}//字符串输出函数
void My_Usart_Send_Sting( USART_TypeDef* USARTx, char * string)
{uint16_t i=0;do{My_Usart_Send_Byte(USARTx,*(string+i));i++;}while(*(string+i) != '\0');while( USART_GetFlagStatus( USARTx, USART_FLAG_TC) == RESET);
}
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();My_Usart_Send_Byte( USART1, 'A');My_Usart_Send_Byte( USART1, 'B');My_Usart_Send_Byte( USART1, 'C');My_Usart_Send_Sting( USART1, "\r\n"); //回车换行My_Usart_Send_Sting(USART1 , "fei \r\n");while(1){}
}
结果展示