AT32F403A串口收发

1 串口配置

void usart_config(void)
{
  gpio_init_type gpio_init_struct;
	
  crm_periph_clock_enable(CRM_USART2_PERIPH_CLOCK, TRUE);
  crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);

  gpio_default_para_init(&gpio_init_struct);
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
  gpio_init_struct.gpio_pins = GPIO_PINS_2;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOA, &gpio_init_struct);

  gpio_init_struct.gpio_pins = GPIO_PINS_3;
	
  usart_init(USART2, 230400, USART_DATA_8BITS, USART_STOP_1_BIT);
	
  nvic_irq_enable(USART2_IRQn, 0,0);

  usart_transmitter_enable(USART2, TRUE);
  usart_receiver_enable(USART2, TRUE); 	
  usart_interrupt_enable(USART2,USART_RDBF_INT, TRUE);
  usart_interrupt_enable(usart2,USART_IDLE_INT, TRUE);
  usart_enable(USART2, TRUE);		

}

2 中断接收

void USART2_IRQHandler(void)
{
  uint32_t temp;
  if(usart_flag_get(usart2, USART_RDBF_FLAG) != RESET)
  {
		usart2_rx.rx_buffer[usart_tx_rx.rx_cout++] =usart2->dt;
  }
	if (usart_flag_get(usart2, USART_IDLEF_FLAG) != RESET)
	{		
			temp = usart2->sts;
			temp = usart2->dt;
            temp&=0;
			usart2_rx.recv_end_flag = 1;
	}	
}

3 发送函数

void usart_tx_txdatas(u8 *SendData,u16 len)
{
	u16 i=0;
	for(i=0;i<len;i++)
	{
		while(usart_flag_get(usart2 , USART_TDBE_FLAG) == RESET);	//发送寄存器空
		usart_data_transmit(usart2, SendData[i]);					//发生数据
		while(usart_flag_get(usart2, USART_TDC_FLAG) == RESET);		//发生完成
	}	
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值