简介
首先感谢极术社区和原厂提供的测评板,开发板板载一块GD32F310K8T6芯片,该芯片是ARM Cortes-M4的核心,片内内置64K的FLASH及8K的SRAM供开发者使用。所以在项目中,重点使用单片机对+10.525Ghz雷达模块进行测试,开发相应的测试程序。这对单片机的IO及ADC等外设性能和可靠性有较高的要求。本文从最基础的开始建立工程到配置工程再到USART外设的使用,采集引脚状态进行输出。时间赶所以后期会完成对IIC、SPI等外设的DEMO及功能测评。~~~~
开发环境&参考说明
- Keil-MDK 5.30
- Windows10
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处于关闭状态。
将雷达模组和测评板,手拿着雷达模组,另一只手挥动,串口打印警告状态表示有触发目标,同时板载led处于长亮状态。
可以看到串口打印的数据如下:
总结:
使用国产GD32F310配合微波雷达模块做一些简单应用,所提供的资料对开发者来说还是蛮友好的,也希望国产MCU更上一层楼。看到其他大佬使用的外设自己还没来的及搞,准备抓紧去尝试、去用、去学习咯!