STM32F103之USART接收数据(基于RS485与RS232通信)

(RXNE中断和IDLE中断的区别?当接收到1个字节,就会产生RXNE中断,当接收到一帧数据,就会产生IDLE中断。比如给单片机一次性发送了8个字节,就会产生8次RXNE中断,1次IDLE中断。于是我决定在产生RXNE中断时将接收到的一个字节的数据用数组保存起来。在产生IDLE中断的时候,改变ReceivedFlag(自己定义的一个检测帧数据接收完成状态的标志)的状态。main.c:#...
摘要由CSDN通过智能技术生成

(RXNE中断和IDLE中断的区别?

当接收到1个字节,就会产生RXNE中断,当接收到一帧数据,就会产生IDLE中断。比如给单片机一次性发送了8个字节,就会产生8次RXNE中断,1次IDLE中断。于是我决定在产生RXNE中断时将接收到的一个字节的数据用数组保存起来。在产生IDLE中断的时候,改变ReceivedFlag(自己定义的一个检测帧数据接收完成状态的标志)的状态。

main.c:
#include "stm32f10x.h"
#include "stdio.h"
extern void delay_ms(u16 time); 
void USART_Config(void);
void NVIC_Configuration(void);
int fputc(int ch, FILE *f);
void Usart_SendByte();
uint16_t  i;

uint8_t u2_Temp;
extern uint8_t u3Temp;
extern uint16_t uart_p;
int RxFlag; 
extern uint8_t ReceivedFlag,tempU3,uart3_RXbuff[];


/*
 * UART2: TX: PA2	  RX:PA3	
 * UART3:TX:PB10	RX:PB11	TXRXEN:PD3
 * UART5:TX:PC12	RX:PD1 	TXRXEN:PD0
 * 
 */
int main()
{
    SystemInit();//72m
    
		NVIC_Configuration();
    USART_Config();
//	printf("重定向成功\n");
	for(i=0;i<=0xff;i++)
	{
		Usart_SendByte( USART2,i);
//		printf("%d",i);
	}	
    while(1)
		{
			if(ReceivedFlag == 1)//帧数据显示。收到一帧数据时,显示接收中断数组保存的一帧数据
			{				
				for(uart_p= 1; uart_p <= u3Temp; uart_p++)
				{
					Usart_SendByte(USART2,uart3_RXbuff[uart_p]);
				}
				ReceivedFlag = 0;
				uart_p = 1;
			}			
			
		}
}




static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  
  /* 嵌套向量中断控制器组选择 */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  
  /* 配置USART为中断源 */
  NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
  /* 抢断优先级*/
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  /* 子优先级 */
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  /* 使能中断 */
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  /* 初始化配置NVIC */
  NVIC_Init(&NVIC_InitStructure);
} 


void USART_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;

	// 打开串口GPIO的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	// 打开串口外设的时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);

	// 将USART Tx的GPIO配置为推挽复用模式
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_
  • 9
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值