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); //发生完成
}
}