忍者神憋 · 2022年04月18日

【GD32F310开发板试用】GD32F310+10.525Ghz微波雷达模块--串口打印模块状态

简介
首先感谢极术社区和原厂提供的测评板,开发板板载一块GD32F310K8T6芯片,该芯片是ARM Cortes-M4的核心,片内内置64K的FLASH及8K的SRAM供开发者使用。所以在项目中,重点使用单片机对+10.525Ghz雷达模块进行测试,开发相应的测试程序。这对单片机的IO及ADC等外设性能和可靠性有较高的要求。本文从最基础的开始建立工程到配置工程再到USART外设的使用,采集引脚状态进行输出。时间赶所以后期会完成对IIC、SPI等外设的DEMO及功能测评。~~~~

开发环境&参考说明

  • Keil-MDK 5.30
  • Windows10
  • 微信截图_20220417233917.png

Demo_Code
串口部分:
`

void my_uart_init(void)
{

//enable clock
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_USART0);

//Tx=PA9 
gpio_mode_set(GPIOA,GPIO_MODE_AF,GPIO_PUPD_PULLUP,GPIO_PIN_9);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);

//Rx=PA10
gpio_mode_set(GPIOA,GPIO_MODE_AF,GPIO_PUPD_PULLUP,GPIO_PIN_10);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10);

nvic_irq_enable(USART0_IRQn,0,0);

gpio_af_set(GPIOA,GPIO_AF_1,GPIO_PIN_9|GPIO_PIN_10);

/*USART-Config*/
usart_deinit(USART0);
usart_baudrate_set(USART0,115200);
usart_word_length_set(USART0,USART_WL_8BIT);
usart_stop_bit_set(USART0,USART_STB_1BIT);
usart_parity_config(USART0,USART_PM_NONE);
usart_hardware_flow_rts_config(USART0,USART_RTS_DISABLE);
usart_hardware_flow_cts_config(USART0,USART_CTS_DISABLE);
usart_receive_config(USART0,USART_RECEIVE_ENABLE);
usart_transmit_config(USART0,USART_TRANSMIT_ENABLE);
usart_enable(USART0);
usart_interrupt_enable(USART0,USART_INT_RBNE);
usart_interrupt_enable(USART0, USART_INT_IDLE);         

}

void USART0_IRQHandler(void)
{

if(RESET!=usart_interrupt_flag_get(USART0,USART_INT_FLAG_RBNE))
{
   
    DATA=usart_data_receive(USART0);//rec data
  
            usart_data_transmit(USART0,DATA);
        
}else if(RESET!=usart_interrupt_flag_get(USART0,USART_INT_FLAG_IDLE))
{
    usart_interrupt_disable(USART0,USART_INT_IDLE);
}

}

/ retarget the C library printf function to the USART /
int fputc(int ch, FILE *f)
{

usart_data_transmit(USART0, (uint8_t) ch);
while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));
return ch;

}
`
主函数部分:
`
void gd_led_config(void);
void gd_led_toggle(void);

/*!

\brief      main function
\param[in]  none
\param[out] none
\retval     none

*/
int main(void)
{

gd_led_config();
systick_config();
my_uart_init();
  my_radar_init();

while(1) {
    /* insert 500 ms delay */
    //delay_1ms(500);

    /* toggle the LED */
    //gd_led_toggle();

    /* insert 500 ms delay */
    //delay_1ms(500);
        if(AC_Signal_val>threshold_val+DC_Signal_val)
        {
            
            gpio_bit_set(GPIOA,GPIO_PIN_1);
            FAX_LOG("Warning!\n");
            delay_1ms(1000);
        }
        else
            gpio_bit_reset(GPIOA,GPIO_PIN_1);
        
        FAX_LOG("No One!\n");
        delay_1ms(1000);
}

}

/*!

\brief      configure led
\param[in]  none
\param[out] none
\retval     none

*/
void gd_led_config(void)
{

/* enable the led clock */
rcu_periph_clock_enable(RCU_GPIOA);

/* configure led GPIO port */
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);

GPIO_BC(GPIOA) = GPIO_PIN_1;

}

/*!

\brief      toggle led
\param[in]  none
\param[out] none
\retval     none

*/
void gd_led_toggle(void)
{

GPIO_TG(GPIOA) = GPIO_PIN_1;

}
`
硬件连接&实现效果
将雷达模组和测评板,手拿着雷达模组不动,串口打印无触发状态,同时板载led处于关闭状态。
image.png
将雷达模组和测评板,手拿着雷达模组,另一只手挥动,串口打印警告状态表示有触发目标,同时板载led处于长亮状态。
触发.jpg
可以看到串口打印的数据如下:
串口输出.png
总结:
使用国产GD32F310配合微波雷达模块做一些简单应用,所提供的资料对开发者来说还是蛮友好的,也希望国产MCU更上一层楼。看到其他大佬使用的外设自己还没来的及搞,准备抓紧去尝试、去用、去学习咯!

推荐阅读
关注数
10708
内容数
187
中国高性能通用微控制器领域的领跑者兆易创新GD系列芯片技术专栏。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息