×
嵌入式 > 技术百科 > 详情

关于GD32F450测试:ADC采样实验解决方案

发布时间:2020-06-17 发布时间:
|

网友推荐可以采用ARMmbed的STM32F429过程来开发GD32F450,于是立即生成F429的工程下载下来,IAR的工程不能用,运行报错,由于休息的原因不能都玩这玩意了,于是改用Keil5.18a来开发。展开下载的Keil工程,在属性中将芯片换成GD32F450,设置好下载工具以及创建各种文件夹,就是0713.h存放的文件夹以及对应的文件而后开始准备做实验。

首先更改PinName.h文档,重点是需要用的一些管脚;查手册,100Pins的芯片只有PA_0~15、PB_0~15、PC_0~15、PD_0~15、PE_0~15、PH_0,PH_1

接着更改Arduino的定义,按照网上下来的网友画的管脚逻辑,将Arduino的一一更改过来。下边的工作就简单了,首先定义对象:

DigitalOut led1(LED1);//3个LED对象,LED4,5,6

DigitalOut led2(LED2);

DigitalOut led3(LED3);

AnalogIn ad0(PA_3);//ADC0对象

PwmOut pwm0(PB_10);//PWM0,1对象

PwmOut pwm1(PB_11);

Ticker myTim0;//Ticker对象

声明函数:

void dispBase(void);

void dispMes(void);

定义全局变量:

uint32_t js;

int ledt=0;

float val0,dut0=0.100f,dut1=0.050f,ddut0=0.002f,ddut1=0.003f;

定义ioInit()函数:

void ioInit(void){

led1=1;

pwm0.period(0.002f);//PB_10

pwm1.period(0.001f);//PB_11

}

定义Ticker函数:

void tipInit(){js++;}

main函数中的代码直接给出:

int main(){

lcdInit();

lcdClear();

dispBase();

myTim0.attach(&tipInit,0.005f);//声明Ticker5mS中断1次

while(1){

if(led1)led1=0;else led1=1;

val0=ad0.read();

if(dut0>0.96f) dut0=0.002f;dut0+=ddut0;

if(dut1>0.95f) dut1=0.003f;dut1+=ddut1;

pwm0=dut0;pwm1=dut1;

dispMes();

wait(0.02);

}

}

dispBase()与dispMes()函数与前边的一样,稍稍改改即可,此处省略了。

mbed工程应用总结:

1. 采用STM32F429MBED工程可以有限的开发GD32F450。

2. 开发过程发现许多功能不一定正常,比如Arduino有6路ADC,可以配置的有A0,A1,A4,A5这4路,但实际有效的只有A0这一路,其他许多IO口与实际的不一定一样,也许网友给的管脚连接逻辑图不太准确,如果有官方的标准引脚逻辑就好了,可以参考一下。

3. 遍历工程没有找到设置SystemClockCoreClock的地方,也无从自己编了。感觉其系统时钟可能需要人为参与设置,护着直接焊上外部晶体和补偿电容。

4. 此开发板用来做项目,对于已经使用过这类开发板的来说,可能会好一点,如果是首用,恐怕想的下点功夫先把开发板的一些东西弄明白了在开始。这需要专职人员花不少时间的。实际上这样的开发板需要做许多前期的工作再推出会更好些。

5. 建议厂家可以按照国外的一些厂家的做法,比如NXP、等,将开发板的彩页上直接印出所有引脚逻辑和资料获取地址——就像STEP2的包装盒一样;例外,优化所有工程代码和实例——无论是用什么开发平台,并且给出的实例有较好的重现性和良好的注释,以便快速开发。在这点上可以建议组织想试用开发板的人群分工合作进行功能模块的完善,也可以找1~2所学校赠送一些开发板,由学生实验完成这些工作,这样可以一举多得。


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Semtech的LoRa技术携手Chipsafer将牧场连接至云端