串口实战示例——数据发送接收

串口的理论部分我们就不讲了。直接上代码

首先是我们的usart.c文件


#include "bsp_usart.h"
void My_USART1(void)
{
	GPIO_InitTypeDef  GPIO_InitStrue;
	USART_InitTypeDef USART1_InitStrue;
	NVIC_InitTypeDef NVIC_InitStruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	
	GPIO_InitStrue.GPIO_Mode=GPIO_Mode_AF_PP;
	GPIO_InitStrue.GPIO_Pin=GPIO_Pin_9;
	GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;		
	GPIO_Init(GPIOA,&GPIO_InitStrue);
	
	GPIO_InitStrue.GPIO_Mode=GPIO_Mode_IN_FLOATING;
	GPIO_InitStrue.GPIO_Pin=GPIO_Pin_10;
	//GPIO_InitStrue.GPIO_Speed=GPIO_Speed_10MHz;		
	GPIO_Init(GPIOA,&GPIO_InitStrue);
	
	USART1_InitStrue.USART_BaudRate=9600;
	USART1_InitStrue.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
	USART1_InitStrue.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
	USART1_InitStrue.USART_Parity=USART_Parity_No;
	USART1_InitStrue.USART_StopBits=USART_StopBits_1;
	USART1_InitStrue.USART_WordLength=USART_WordLength_8b;
	
	USART_Init(USART1,&USART1_InitStrue);
	// ¿ªÆôÖжϳõʼ»¯NVIC
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
	NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
	
	NVIC_Init(&NVIC_InitStruct);
	
	//USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//½ÓÊÕÖжÏ
	USART_Cmd(USART1,ENABLE);	
}

/*****************  ·¢ËÍÒ»¸ö×Ö½Ú **********************/
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{
	/* ·¢ËÍÒ»¸ö×Ö½ÚÊý¾Ýµ½USART */
	USART_SendData(pUSARTx,ch);
		
	/* µÈ´ý·¢ËÍÊý¾Ý¼Ä´æÆ÷Ϊ¿Õ */
	while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);	
}


/*****************  ·¢ËÍ×Ö·û´® **********************/
void Usart_SendString( USART_TypeDef * pUSARTx, char *str)
{
	unsigned int i=0;
	while(*str++!='\0')
	//while(str[i++]!='\0')
	{
		Usart_SendByte( pUSARTx, *str );
	
	}
  /* µÈ´ý·¢ËÍÍê³É */
	while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET)
	{}
}
//½ÓÊÜ
uint8_t USART_ReceiveByte(USART_TypeDef* USARTx)
{
	while(USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==RESET);
	return (uint8_t)USART_ReceiveData(USART1);
}

//uint16_t USART_ReceiveData(USART_TypeDef* USARTx);

//ÖжϷþÎñº¯Êý
void USART1_IRQHandler()
{ 
	u16 temp;
	while(USART_GetFlagStatus(USART1,USART_IT_RXNE)==RESET);
	temp = USART_ReceiveData(USART1);
	Usart_SendByte(USART1,temp);
}

/*
ʹÓÃprintfº¯Êý
ҪעÒâÒªÌî¼ÓÍ·Îļþ
#include "stdio.h"
ʾÀý´úÂëÈçÏ£º
int fputc(int ch ,FILE *f)
{
	USART_SendData(USART1,(uint8_t ch));
	while(USART_GetFlagStatus(USART1,USART_IT_RXNE)==RESET);
	return ch ;

}

int fgetc(FILE *f)
{
	while(USART_GetFlagStatus(USART1,USART_IT_RXNE)==RESET);
	return (int) USART_ReceiveData(USART1);


}

*/

usart.h

#ifndef __BSP_USART_H
#define __BSP_USART_H
#include "stm32f10x.h"

void My_USART1(void);//³õʼ»¯
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch);
void Usart_SendString( USART_TypeDef * pUSARTx, char *str);
uint8_t USART_ReceiveByte(USART_TypeDef* USARTx);//½ÓÊܺ¯Êý
void USART1_IRQHandler(void);//ÖжϷþÎñº¯Êý

#endif 

主函数

#include "bsp_usart.h"
#include "stdio.h"
int main(void)
{
	u16 temp;
	u16 num;
	LED_GPIO_Config();
	delay_init();
	My_USART1();
	//Usart_SendString(USART1," xiaobai\n");
	printf("hello");
	while(1)			
	{	
		Usart_SendString(USART1," xiaobai\n");
		delay_ms(1000);	
	};
		
}

实验效果如下:

我们发送你好小白给单片机然后单片机会返回我们发送的数据给我们

/*  注释乱码是因为文本的格式没有选对*/

自己在keil5中选就可以了

步骤如下

 

 选择UTF-8格式即可

效果如下:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值