赞
踩
w806为联盛德公司推出一款基于平头哥(XT-E804)架构的MCU。
这里自己随便入手一个W806芯片的开发板,淘宝现如今有很多在售的,笔者找了个最便宜的入手的。现如今W806已支持Arduino开发,总还是有人愿意为了简化放了方便而努力的。来体验一下吧!!! (觉得废话的直接跳到 二、环境准备)
封装QFN56, 6mm x 6mm, pin间距0.35mm
没有Arduino环境的安装Arduino IDE,浏览器自行下载(或文末提供链接)无论是新版还是旧版均可,无所谓。最重要的是添加W80X的支持包,这里是我在GitHub上找到的一个开源项目,基于Hi-Link(海凌科)开发生产的开发板由此nulllab空想实验室团队 维护。个人标识对他们的支持哈,希望能够一直维护下去。
好了进入正题,进入Arduino IDE操作如下:
菜单栏:文件 -> 首选项’
在附加开发板管理器网址输入如下网址:
https://cdn.jsdelivr.net/gh/Hi-LinkDuino/w80x_arduino/package_w80x_proxy_index.json
如果这个不行请使用这个链接地址:
https://cdn.jsdelivr.net/gh/Hi-LinkDuino/w80x_arduino/package_w80x_index.json
菜单栏:工具->开发板->开发板管理 搜索 w80x_duino ,选择最新版本安装(如果搜索不到,请安装arduino IDE1.8.15以上)
安装后就可以在这里看到了即代表w80x_duino开发环境搭建完成
同样是在工具->选择好对应的开发板,然后在文件-> 示例中找到对应的示例打开demo即可。
由于老版本的Arduino没有输入提示且无法查看头文件等笔者安装了ArduinoIDE 2.0版本 ,故再查看库函数及宏定义时发现GPIO操作与STM32库函数比较相似,且以HAL库方式来处理,故轻松上手并在此处加了个串口打印,调用状态翻转函数实现闪灯。
/*************************************************** * W806_LED GPIO初始化 *************************************************/ void GPIO_Init(void) { // GPIO_InitTypeDef GPIO_InitStruct = { 0 }; //例程里的写法,以下写法也可以的类似STM32 GPIO_InitTypeDef GPIO_InitStruct; GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2, GPIO_PIN_SET); } void setup() { // put your setup code here, to run once: printf("Led Demo \r\n"); GPIO_Init(); } void loop() { // put your main code here, to run repeatedly: printf("LED_Tog...\r\n"); HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0); //LED0状态翻转 HAL_Delay(500); }
烧录程序时需要注意自己的开发板是否支持一键烧录,也就是说使用串口芯片是否有该电路设计,笔者使用的板子其串口芯片为CH340N,并不支持一键烧录电路,故需要在下载程序前 按住BOOT键的同时按下复位键,然后再将按键松开使芯片进入下载模式。
通过示例程序来看,该团队基于Arduino的W806开发支持,其底层如CDK一致,在函数封装上保持一个调调,学过HAL库开发STM32的朋友也非常容易上手。
如图为Arduino W806支持文件中的一些头文件,和CDK中对比其文件内容 也是一致的。
下面是通过Arduino IDE 2.0查看到的程序入口代码:
#include <stdio.h> #include <arduino.h> #include "wm_hal.h" void Error_Handler(void); int main(void) { #if (F_CPU == 240000000) uint32_t f_cpu_dir = (uint32_t)CPU_CLK_240M; #elif (F_CPU == 80000000) uint32_t f_cpu_dir = (uint32_t)CPU_CLK_80M; #elif (F_CUP == 4000000) uint32_t f_cpu_dir = (uint32_t)CPU_CLK_40M; #elif (F_CUP == 2000000) uint32_t f_cpu_dir = (uint32_t)CPU_CLK_2M; #else uint32_t f_cpu_dir = CPU_CLK_160M; #endif SystemClock_Config(f_cpu_dir); init(); setup(); for (;;) { loop(); } return 0; } void Error_Handler(void) { while (1) { } } void assert_failed(uint8_t *file, uint32_t line) { printf("Wrong parameters value: file %s on line %d\r\n", file, line); }
其实不论用什么IDE都只是工具,只不过有的工具用起来顺手方便,有的工具即使功能强大但不够便捷舒适,经此区别而已。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。