我用例程 改为COM1收发,初始化如下:
void App_usart1_HardInit(void)
{
gpio_init_type gpio_init_struct;
// 使能引脚时钟
crm_periph_clock_enable(CRM_USART1_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
// 初始化引脚定义变量组
gpio_default_para_init(&gpio_init_struct);
// PA9(TX)
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_9;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOA, &gpio_init_struct);
// PA10(RX)
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_INPUT;
gpio_init_struct.gpio_pins = GPIO_PINS_10;
gpio_init_struct.gpio_pull = GPIO_PULL_UP;
gpio_init(GPIOA, &gpio_init_struct);
// config usart nvic interrupt //
nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);
nvic_irq_enable(USART1_IRQn, 0, 0);
// configure usart1 param //
// usart_init(USART1, 19200, USART_DATA_8BITS, USART_STOP_1_BIT);
usart_init(USART1, 115200, USART_DATA_8BITS, USART_STOP_1_BIT);
usart_transmitter_enable(USART1, TRUE);
usart_receiver_enable(USART1, TRUE);
// enable usart1 interrupt //
usart_interrupt_enable(USART1, USART_RDBF_INT, TRUE);
usart_enable(USART1, TRUE);
// usart_interrupt_enable(USART1, USART_TDBE_INT, TRUE);
}
// 中断处理
void USART1_IRQHandler(void)
{ uint16_t ucRData=0;
if(usart_flag_get(USART1, USART_RDBF_FLAG) != RESET)
{
// read one byte from the receive data register //
ucRData = usart_data_receive(USART1);
// 中断已进来,但读出的数据为0
usart_data_transmit(USART1,ucRData);
at32_led_toggle(LED3);
}
at32_led_toggle(LED4);
}
// -------------------------------------------------------------------
如果是MCU向PC机发送正常,就是PC机向MCU发送,MCU已进入接收中断 ,但读出的数据全为0,不知为什么? 有没有人帮忙解决一下,对所有提供帮助者都感激不尽!
|