前言:
首先感谢21ic与雅特力,给了我这个机会,我一开始接触雅特力是公司的产品准备从ST转到国产芯片,然后选型就选型到了雅特力的AT32F415,开发完成之后,投入量产,因为雅特力芯片物美价廉,所以另一款产品也准备使用雅特力芯片,就在这时,我入手了AT-START-F421,也开始了我移植安信可的LoRa模块的小任务。在此期间,加入了雅特力的官方群,虽然我一直在潜水,但是群里面和谐的氛围加上讨论技术的热烈氛围让人很沉迷。对于雅特力这个品牌的好感直线上升,移植过程也很顺利。接着公司准备制造一款新产品,模拟量温控器0~10V电压变送输出,还在计划当中,不过一致选择了AT32F403A系列。正好雅特力在论坛开启免费申请开发板的活动,我直接就参与了,当时的想法和现在一致,做一款驱动LCD屏幕,拥有无线通信的温控器Demo。不过天有不测风云,在抽中开发板申请资格之前,感染了新冠,虽然在21ic工作人员的努力下,开发板在12月31日左右就寄送到了公司,奈何我身体实在不适,直到1月第二周左右我才拿到开发板上电。实在是抱歉,评测报告提交的太晚了。
我主要测试了AT32-START-403A的ADC内部温度传感器、DAC1+DMA输出三种波形、50%PWM输出、硬件SPI驱动屏幕、移植了安信可LoRa模块Ra-01s,很遗憾都是测试了基本的功能,没有来及测试雅特力不少特色功能,不过AT32F403AVGT7这款芯片对于温控器来说太过奢侈了,实在是太强大了。
基本功能测试:
首先拆开包装,上电还是雅特力的三颗小灯闪烁,点击USER按钮,三颗小灯的闪烁速度变快,不过板子上的ATLINK加USB还是Micro USB接口,听雅特力大佬说新的板子已经换成type-c口了,不过无伤大雅,首先映入眼帘的是jp8跳线端子,板子上所有带*号的引脚都是和这里相关,不过我一直没有使用到这边的功能,所以这个跳线帽就一直放在IO*这边没有去使用SPIM也是小小遗憾,之后再来使用。给板子上电之后,去官网下载了雅特力的BSP,雅特力资料特别多,但是相关芯片的资料必须从产品讯息点击相应的芯片之后再点击下载资源才能找到。然后技术与开发支持的下拉选项全是英文,在其他下拉选框都是英文的情况下稍微有点突兀算是我个人的槽点,下载好BSP之后,发现和F421的包不一样,加入了407的支持包,403A比407就少了EMAC。
我首先测试了ADC内部温度传感器,照着雅特力BSP里面的例子照抄了一个函数出来,和普通的ADC采集有一个不同的点,需要使用adc_tempersensor_vintrv_enable()来开启内部温度传感器与ADC1的特定16通道,结果如下:
图1.1内部温度传感器log
当天的办公室内温度大约在19.5度左右,芯片内部还是更热一些。
然后我测试了单个DAC1的输出,从雅特力的官方例子中找了定时器触发输出正弦波、输出梯形波,软件触发输出方波,并整合成了一个函数,简单测试下,结果如下:
图1.2 DAC输出正弦波1
图1.3DAC输出正弦波2
图1.4DAC输出梯形波1
图1.5DAC输出梯形波2
图1.6DAC输出方波
图1.7DAC输出方波2
波形都非常完美,再找到雅特力例子结果对比,基本是一丝不差,在我的使用范围里,已经是非常满意了。
最后我测试了TMR4从引脚PB6输出50%PWM波,结果如下:
图1.8PWM
可能是我的线不太好,看起来这个波形不太好看。总体来说基本功能完全满足我的需求。
扩展硬件测试:
身为一款温控器产品,怎么能没有人机交互加通信功能,至此我加入了一块屏幕扩展板加LoRa模块。保证这个Demo看起来确实像一回事,成品如下:
图2.1整体
看起来乱了一点,但是功能还是跑起来了,这里有一个问题,我本来想把SPI1使用重映射去别的引脚,因为SPI1默认的引脚占用了DAC的输出,DAC的输出引脚又是特定的PA4与PA5,但是使能了IOMUX时钟加上gpio_pin_remap_config()函数之后,SPI1并没有在重映射之后的引脚上输出,这里又引出一个槽点,雅特力这边好难查的表,把我折磨坏了,但是都用了这种形式了,也只能查表。既然不工作,只好重新回到默认引脚,好消息是屏幕只需要SPI半双工发送就能驱动,坏消息是SCK还是占用了PA5,只好测试单DAC1的输出。
屏幕首先移植了购买这块屏幕扩展板时,商家提供的文件,很折磨人的一点是时序始终对不上,又懒得翻屏幕驱动数据手册。最后不小心加了1us的延时,才解决,上天还是比较眷顾懒人。跑了三行字,效果如下:
图2.2点亮LCD
既然点亮了屏幕就要使用高级点的素材,保证产品的高级感,因为我是第一次使用lvgl,所以就跟着正点原子的视频进行了移植,随着移植的过程,这块屏幕大概是属于中景园电子阵营,他们提供的屏幕驱动在lvgl移植上打点函数和lvgl不匹配,在找寻帮助的过程中发现大家都是在这块出现问题的,我在CSDN的林叔叔336大神处找到了一个打点函数:
void LCD_Color_Fill(u16 sx, u16 sy, u16 ex, u16 ey, lv_color_t *color)
{
u16 i,j;
u32 k=0;
uint32_t x=0,y=0;
u16 height, width;
width = ex - sx + 1; //得到填充的宽度
height = ey - sy + 1; //高度
LCD_SetRegion(sx,sy,ex,ey);
for(y = 0; y <width*height; y++)
{
LCD_WR_16BitDATA(color->full);
color++;
}
}
很感谢有这么多领路人,我终于是把lvgl的一个小组件在屏幕上跑起来了,结果如下:
图2.3lvgl按钮
这是跟着正点原子的老师在视频里面创建的一个按钮,可惜这块屏幕没有触摸功能,所以仅仅就是一个按钮,然后为了测试403A的性能,我跑了一下lvgl官方的压力测试,结果是很卡,我没有使用DMA就单单使用了SPI查询发送。基于时间问题,之后再来优化。
接下来是LoRa模块,我采用的是模拟spi进行驱动,LoRa模块在之前我使用F421移植过了,算是轻车熟路。安信可的LoRa模块驱动是底层升特的驱动的中间层,修改SX126xSTM32F103-board.c、project_config.h就好,安信可也提供了移植策略。不过安信可这边的纠错文档并没有更新,如下:
在升特的126x系列芯片中,芯片的关键值为0x38。算是安信可没更新及时。当时可是把我折磨坏了,我还以为是spi时序出了问题,怎么读取都是0x38。我把中间层整合到了LoRaBoard.c与LoRaBoard.h中,然后直接移植升特的radio.c、radio.h、sx126x.c、sx126x.h就行。结果如下:
图2.4安信可LoRa模块Demo log
这是跑安信可的Demo,printf输出到串口上的log
图2.5LoRa模块接收
这是另一个LoRa模块收到的数据
最后,基于我的需求,对升特的原文件进行了修改,我将radio.c的第888行和第1001把低速优化的判断注释掉了,直接让LoRa开启低速率优化。
总结:
我一共测试了身位一款温控器需要的几个基本功能加上自己扩展的两个模块。基于时间的关系,这些活做的很粗糙,之后我才能慢慢来优化算是比较难受。我在整个过程中没有遇到什么比较困难的问题,还算是顺利得跟着雅特力官方库程序基于我的需求把AT32F403A小小的玩了一遍。我尚未涉及这款芯片的特色功能可以说是数不胜数,比如雅特力得意的slib加密技术、F403A的XMC功能、两个超厉害的定时器,还有usb等等功能。只能之后再来慢慢尝试,实在抱歉。
对于这个Demo还存在不少问题,比如需要把刷屏的硬件SPI接上DMA,因为我是第一次接触这块屏幕,驱动什么的倒懂不懂,这件事得先研究一下屏幕的驱动芯片ST7789V才行。然后屏幕的lvgl我只是移植了文件,还不会开发lvgl,都是之后研究的课题。最后LoRa模块因为F403A的引脚速度太快,启动速度比较慢,得在模拟spi中插入延时才行。
写在最后,祝雅特力新的一年大卖,21ic红红火火,谢谢雅特力和21ic给了我这次机会,我学到很多,优化了之前自己移植的LoRa中间层,学习了LCD屏幕点亮的方法,开始使用lvgl这个非常流行的gui组件库。也认识到了现在国产芯片强劲的实力,稳定的性能,未来也会更多得使用雅特力以及国产的其他芯片。
ps:
论坛直接上传不了工程,我分享到了百度网盘,抱歉抱歉。
链接:https://pan.baidu.com/s/1K3wMVxGt7I4eYRLXeL3foQ
提取码:wm26
|