[活动专区] 【AT-START-F425测评】串口唤醒

[复制链接]
930|0
 楼主| 90houyidai 发表于 2022-3-18 00:17 | 显示全部楼层 |阅读模式
这次拿到的开发板是AT32F425,是一款主频最高96MHz的ARM® Cortex®-M4核的片子,最大提供了64+4KB 闪存容量全系列都只有1组2M采样速率12位A/D转换器(16通道)
但是在通信接口上还是比较丰富的
提供了2 组I²C (支持SMBus/PMBus),
3组 SPI / I²S (SPI可达36MHz)(任意2个半双工I²S可以组合为1个全双工I²S),
4组 USART (支持ISO7816,LIN,IrDA接口和调制解调控制),
一个OTG全速控制器, 设备模式时支持无晶振(Crystal-less),
一个CAN 2.0B和一个红外发射器

下面是我测试串口唤醒的样例
串口的唤醒采用ID的形势,总共0x0-0xf 16个ID
唤醒后需要再次使能,才能再次使用

串口初始化
  1. gpio_init_type gpio_init_struct;

  2.   /* enable the usart1 and gpio clock */  
  3.   crm_periph_clock_enable(CRM_USART1_PERIPH_CLOCK, TRUE);  
  4.   crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);   

  5.   gpio_default_para_init(&gpio_init_struct);
  6.   
  7.   /* configure the usart1 rx pin */
  8.   gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  9.   gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
  10.   gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
  11.   gpio_init_struct.gpio_pins = GPIO_PINS_7;
  12.   gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  13.   gpio_init(GPIOB, &gpio_init_struct);

  14.   /* config usart1 iomux */
  15.   gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE7, GPIO_MUX_0);

  16.   /* config usart1 nvic interrupt */
  17.   nvic_irq_enable(USART1_IRQn, 0 ,0);
  18.   
  19.   /* configure usart1 param */
  20.   usart_init(USART1, 115200, USART_DATA_8BITS, USART_STOP_1_BIT);
  21.   usart_receiver_enable(USART1, TRUE);
  22.   usart_interrupt_enable(USART1, USART_RDBF_INT, TRUE);
  23.   usart_wakeup_id_set(USART1, 0x01);
  24.   usart_wakeup_mode_set(USART1, USART_WAKEUP_BY_MATCHING_ID);
  25.   usart_receiver_mute_enable(USART1, TRUE);
  26.   usart_enable(USART1, TRUE);  
中断函数
  1. void USART1_IRQHandler(void)
  2. {
  3.   if(usart_flag_get(USART1, USART_RDBF_FLAG) != RESET)
  4.   {
  5.     usart1_rx_buffer[rx_counter++] = usart_data_receive(USART1);
  6.   }
  7. }


主函数

  1. if((usart1_rx_buffer[0] == MATCH_ID_VAL) && (usart1_rx_buffer[1] == DATA2_VAL) && \
  2.       (usart1_rx_buffer[2] == MATCH_ID_VAL) && (usart1_rx_buffer[3] == DATA4_VAL))
  3.     {//81 7A 81 7c
  4.                         usart1_rx_buffer[3]=0;
  5.                         rx_counter = 0;
  6.                         usart_receiver_mute_enable(USART1, TRUE);
  7.       at32_led_off(LED2);
  8.       at32_led_off(LED3);
  9.       at32_led_off(LED4);      
  10.      
  11.     }
  12.                 if((usart1_rx_buffer[0] == MATCH_ID_VAL) && (usart1_rx_buffer[1] == DATA2_VAL) && \
  13.       (usart1_rx_buffer[2] == MATCH_ID_VAL) && (usart1_rx_buffer[3] == DATA1_VAL))
  14.     {
  15.                         //81 7A 81 7f
  16.                         usart1_rx_buffer[3]=0;
  17.                         rx_counter = 0;
  18.                         usart_receiver_mute_enable(USART1, TRUE);
  19.       at32_led_on(LED2);
  20.       at32_led_on(LED3);
  21.       at32_led_on(LED4);      
  22.      
  23.     }
  24.                 if(rx_counter >3)
  25.                 {
  26.                         rx_counter = 0;
  27.                 }


发送相应的命令可以开关LED灯

您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

512

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部