查看: 3332  |  回复: 2
GD32 MCU 开发板 Workshop 报告_驱动A7108
西点
2
主题
49
回复
发表于2019-05-14 23:34:49 | 显示全部楼层
1# 电梯直达

GD32 MCU 开发板 Workshop 报告

一、方案简介

本方案基于GD32E231C-START 评估板,评估板使用GD32E231C8T6作为主控制器。无线通信部分采用 笙科电子高效能Sub 1GHz家族芯片中的A7108A7108 是适用于 315/433/470/ 510/868/915MHz 的无

线应用。低功耗,最大功率可达到19dBm,不需要外加LNAPA就可适用长距离应用。因此,非常适

470MHZ~510MHZ中国的无线抄表系统与868MHZ欧洲Wireless Meter BusA7108的传输速度是可

程序化的,从2K250Kbps可满足不同的系统需求。在传输方面,A7108分别在TX/RX都有64Byte

FIFO,可提供接收和发送数据。在接口方面,A7108提供3线SPI模式,SCS,SCK,SDIO。另外加一个数据收发完成中断

引脚。加上电源,6根线即可满足通信的需求。

二、GD32 MCU产品的介绍

? GD32E231C8T6主要规格参数:

? Cortex ? -M23  32-bit MCU@72MHZ

? ROM:64KB

? RAM: 8KB

? UART/USART: 2

? SPI: 2

?  工作电压: 1.8V~3.6V

? I/O数量:38

?  系统架构

GD32E231的系统架构如上图所示。

三、方案介绍及框图

利用GD32 MCU完成对A7108的驱动,实现发送数据。并将发送的数据通过串口打印出来。每发送一次,LED闪烁一次。

四、调试记录

?  首先实现对LED灯的驱动。按照DEMO例子,很容易就上手了。

?  实现对USART0的驱动。按照以往的习惯,主动发送,中断接收。通过阅读DEMO例子,发现GD32E231的串口驱动比STM32封装程度更高,库函数写的不错,容易让人理解。

封装好的串口初始化函数。

void com_usart_init(unsigned int uiBaudrate)

{

/* enable COM GPIO clock */

rcu_periph_clock_enable(RCU_GPIOA);

/* connect port to USARTx_Tx */

gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_9);

/* connect port to USARTx_Rx */

gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_10);

/* configure USART Tx as alternate function push-pull */

gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_9);

gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_9);

/* configure USART Rx as alternate function push-pull */

gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_10);

gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_10MHZ, GPIO_PIN_10);

/* 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, uiBaudrate);

usart_receive_config(USART0, USART_RECEIVE_ENABLE);

usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);

/* enable USART TBE interrupt */

//    usart_interrupt_enable(USART0, USART_INT_TBE);

usart_interrupt_enable(USART0, USART_INT_RBNE);

nvic_irq_enable(USART0_IRQn, 0);

usart_enable(USART0);

}

串口发送函数:

//=============================================================================

//文件名称:

//功能概要:USART0发送一个字节函数

//参数说明:第一个参数为待发送的数据

//函数返回:无

//=============================================================================

void USART0_SendOneByte(uint8_t Byte)

{

usart_data_transmit(USART0, (uint8_t) Byte);

while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));

}

//=============================================================================

//文件名称:

//功能概要:USART0发送函数

//参数说明:第一个参数为待放的数据缓冲区,第二个变量为数据长度

//函数返回:无

//=============================================================================

void USART0_SendBuf(uint8_t *pBuf, uint16_t u16Len)

{

while(u16Len--)

{

usart_data_transmit(USART0, *pBuf++);

while(RESET == usart_flag_get(USART0, USART_FLAG_TBE));

}

}

?  移植A7108的驱动及发送函数。最早的A7108驱动是在51单片机上面写的,由于51GD32E231的区别,在IO模拟SPI口读写上面,数据的读写需要转换方向。我是这么做的。

#define  ReadMode    1

#define  WriteMode   2

void  A7108_SDIO_Mode(unsigned char ucMode)

{

if(ucMode == ReadMode)

{

rcu_periph_clock_enable(A7108_SDIO_GPIO_CLK);

/* configure button pin as input */

gpio_mode_set(A7108_SDIO_GPIO_PORT, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, A7108_SDIO_PIN);      // SDIO 输入模式


}

else if(ucMode == WriteMode)

{

rcu_periph_clock_enable(A7108_SDIO_GPIO_CLK);

gpio_mode_set(A7108_SDIO_GPIO_PORT,GPIO_MODE_OUTPUT,GPIO_PUPD_PULLUP,A7108_SDIO_PIN);             gpio_output_options_set(A7108_SDIO_GPIO_PORT,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,A7108_SDIO_PIN);     // sdio  输出模式


}

}


每次读写改变时调用此函数,切换方向。以GD32E231 单片机72MHZ的速度,切换速度很快。


五、实验图片及驱动源代码

 点击查看大图


 点击查看大图


 点击查看大图


 点击查看大图


 点击查看大图 点击查看大图



上传驱动源代码,放到官方任意一个按键DEMO例子里面就可以驱动。

HARDWARE.zip 


主题

回复
  • 温馨提示: 标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考: 社区发帖规则
  • 您当前输入了 0 个文字。还可以输入 8000 个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

禁言/删除

X
请选择禁言时长:
是否清除头像:
禁言/删除备注:
昵 称:
 
温馨提示:昵称只能设置一次,设置后无法修改。
只支持中文、英文和数字。

举报

X
请选择举报类型:
请输入详细内容:

顶部