void usart2_init(void)
{
gpio_init_type gpio_init_struct;
// enable the usart2 and gpio clock
crm_periph_clock_enable(CRM_USART2_PERIPH_CLOCK, TRUE);
// crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);// ÔÚgpio ÄÚÒѾ¼ÓÔØ
gpio_default_para_init(&gpio_init_struct);
// configure the usart2 tx/rx pin
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_MODE_MUX
gpio_init_struct.gpio_pins = GPIO_PINS_2 | GPIO_PINS_3;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOA, &gpio_init_struct);
gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE2, GPIO_MUX_1);
gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE3, GPIO_MUX_1);
nvic_irq_enable(USART2_IRQn, 0, 0);
// configure usart2 param
usart_init(USART2, 9600, USART_DATA_8BITS, USART_STOP_1_BIT);
//------
usart_parity_selection_config(USART2,USART_PARITY_NONE);//ÎÞУÑé
//----------
usart_transmitter_enable(USART2, TRUE);//´®¿Ú·¢ËÍʹÄÜ
usart_receiver_enable(USART2, TRUE);//´®¿Ú½ÓÊÕʹÄÜ
// enable usart2 and usart1 interrupt
usart_interrupt_enable(USART2, USART_RDBF_INT, TRUE);
usart_interrupt_enable(USART2, USART_IDLE_INT, TRUE);
//-----------------------------
// usart_flag_clear(USART2, USART_RDBF_FLAG);
usart_enable(USART2, TRUE);
gpio_bits_reset(GPIOA, GPIO_PINS_10);//ʹÄÜ 485 ½ÓÊÕ
}
void USART2_IRQHandler(void)
{
send(0xa1);
u8 tmp;
uint8_t clear;
if(usart_flag_get(USART2, USART_RDBF_FLAG) != RESET) // USART1
{
tmp =USART2->dt; // USART1
data[bit++]=tmp;
handle();
}
if(usart_flag_get(USART2, USART_IDLEF_FLAG) != RESET) // USART1
{
clear=USART2->sts; // USART1
clear=USART2->dt; // USART1
clear&=0;
}
} |