作品简介
作品通过ADC采集电压,经过4G模块传输到云服务器上。协议采用TCP透传的方式,数据保留在云平台中。
系统框图
ADC采集
ADC采集DMA传输, PA2口,在把传输中添加标识,一起传输到平台上。ADC传输速度,采取1s传输一次,或者10s传输一次,可以通过mode调整。
void dma_config(void)
{
/* ADC_DMA_channel configuration */
dma_parameter_struct dma_data_parameter;
/* ADC DMA_channel configuration */
dma_deinit(DMA_CH0);
/* initialize DMA single data mode */
dma_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA);
dma_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
dma_data_parameter.memory_addr = (uint32_t)(&adc_value);
dma_data_parameter.memory_inc = DMA_MEMORY_INCREASE_DISABLE;
dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;
dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_16BIT;
dma_data_parameter.direction = DMA_PERIPHERAL_TO_MEMORY;
dma_data_parameter.number = 1U;
dma_data_parameter.priority = DMA_PRIORITY_HIGH;
dma_init(DMA_CH0, &dma_data_parameter);
dma_circulation_enable(DMA_CH0);
/* enable DMA channel */
dma_channel_enable(DMA_CH0);
}
void adc_config(void)
{
/* ADC contineous function enable */
adc_special_function_config(ADC_CONTINUOUS_MODE, ENABLE);
/* ADC trigger config */
adc_external_trigger_source_config(ADC_REGULAR_CHANNEL, ADC_EXTTRIG_REGULAR_NONE);
/* ADC data alignment config */
adc_data_alignment_config(ADC_DATAALIGN_RIGHT);
/* ADC channel length config */
adc_channel_length_config(ADC_REGULAR_CHANNEL, 1U);
/* ADC regular channel config */
adc_regular_channel_config(0U, BOARD_ADC_CHANNEL, ADC_SAMPLETIME_55POINT5);
adc_external_trigger_config(ADC_REGULAR_CHANNEL, ENABLE);
/* enable ADC interface */
adc_enable();
delay_1ms(1U);
/* ADC calibration and reset calibration */
adc_calibration_enable();
/* ADC DMA function enable */
adc_dma_mode_enable();
/* ADC software trigger enable */
adc_software_trigger_enable(ADC_REGULAR_CHANNEL);
}
UART传输
Uart发送采用重定向printf()发送串口数据。接收使用串口中断实时处理数据。
void com_usart_init(void)
{
/* enable USART clock */
rcu_periph_clock_enable(RCU_USART0);
/* USART configure */
usart_deinit(USART0);
usart_word_length_set(USART0, USART_WL_8BIT);
usart_stop_bit_set(USART0, USART_STB_1BIT);
usart_parity_config(USART0, USART_PM_NONE);
usart_baudrate_set(USART0, 115200U);
usart_receive_config(USART0, USART_RECEIVE_ENABLE);
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
usart_enable(USART0);
/* enable USART TBE interrupt */
//usart_interrupt_enable(USART0, USART_INT_TBE);
/* enable USART RBNE interrupt */
usart_interrupt_enable(USART0, USART_INT_RBNE);
/* USART interrupt configuration */
nvic_irq_enable(USART0_IRQn, 0);
}
4G模组
模组采用AT进行控制,主要功能为串口透传,把采集到的ADC数据传输到服务器上。还可以通过短信改变ADC采集的模式,由于所用的为物联网卡具体没实现。
void OneNet_link()
{
printf("AT+CIPMUX=0\r\n");
delay_1ms(1000);
// printf("AT+CIPQSEND=0\r\n");
delay_1ms(1000);
printf("AT+CSTT=\"CMNET\"\r\n");
delay_1ms(1000);
printf("AT+CIICR\r\n");
delay_1ms(1000);
printf("AT+CIFSR\r\n");
delay_1ms(1000);
printf("AT+CIPSTATUS\r\n");
delay_1ms(1000);
printf("AT+CIPSTART=\"TCP\",\"183.230.40.40\",\"1811\"\r\n");
delay_1ms(1000);
printf("AT+CIPSTATUS\r\n");
delay_1ms(2000);
printf("AT+CIPSEND=20\r*229939#123456#test*\r\n");
}
实物图
Onenet的数据存储图
实物图
结语
这个板子到手看的挺漂亮的,对比ST的板子手感要好。要是几个直插元件全弄成贴片手感会更好。
固件库会比ST的HAL库更简单使用一些,固件库有几处例子有些错误。总体与ST早期的固件库较像,熟悉ST的比较容易转换到GD过来。不过e231缺少了usb,还有虚拟串口也没有,这个有点遗憾。
刚毕业,很多仪器都没的用了,具体性能无法进行测试,新单片机新特性没尝试。
视频:
https://training.eeworld.com.cn/video/20785
https://training.eeworld.com.cn/video/20786
不知道要怎么写,有问题大家就问。到时有记起来要写再慢慢写贴吧。
附件包含源码,以及4g模块的使用手册,和GD32手册。
补充内容 (2019-7-3 21:57): 突然发现附件里面代码竟然没传上去,现在上传放在楼下
引用: lightxixi 发表于 2019-6-24 15:42 楼主果然出现了* _ *