本帖最后由 Gavin3389 于 2021-11-29 13:21 编辑
FM33LCOXXN开发板评测
废话不多说,直接开始把 ~~~~~~~~~~~~~~~~~~~~~此处省略若干感谢和客套~~~~~~~~~~~~~~~~~~~~~~~~~~~
一、混沌中寻求指路的明灯
论坛网址 www.fmdevelopers.com.cn
先下载了资料,居然提供了原理图和PCB的源文件,非常的大气。 然而,有些小瑕疵, 这里文件名是V1.1版本,而我收到的板子是V1.0的,只有这一个资料包,没有找到V1.0的版本文件。
应该差不多,不会修改太太,本着先看看的心态,打开文件
丝印居然和我的板子一样,是V1.0的,这应该是画图的人,忘了改版本号了吧,无大碍。 刚要欣喜一下,却又发现了问题 先找供电,供电的话应该是J13这里,因为jack端子根本没有焊, 而我的板子J13是type-c而这里是B型USB接口, 整体布局咋一看,没有什么改变,既然只有这一份资料,那么干就完了~~~
初步下载了基础资料文件,再到这回去看论坛, 貌似从这里点击去有新的发现
有个用户手册,应该是网页版的吧,估计可能是为了及时的更新和维护,这个非常不错,能帮助你很快的了解开发板。
这里截一个板子的资源说明,以便有个感性的认知。具体就不再赘述了,不然就显得班门弄斧了,大家自己去看,这个用户手册不错,带你入门还是很容易的,可以看出,手册也正在不断丰富的过程中。
二、秘籍已到手,打磨下冰刃
下面开发环境搭建一下,keil相信每个人的电脑里都有,这里直接安装pack包 我装的是Keil.FM33LC0XX_DFP.3.0.1.pack
安装完之后,keil里就可以看到芯片了
三、先找个简单的篇章,练个气
一起下载的还有很多例程,我选择“ADC查询”来尝试一下,看看环境搭建,pack,下载编译一套下来能不能跑通~~~
主函数 uint32_t GetVoltage;
int main(void)
{
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
/* SHOULD BE KEPT!!! */
MF_Clock_Init();
/* Configure the system clock */
/* SHOULD BE KEPT!!! */
MF_SystemClock_Config();
/* Initialize FL Driver Library */
/* SHOULD BE KEPT!!! */
FL_Init();
/* Initialize all configured peripherals */
/* SHOULD BE KEPT!!! */
MF_Config_Init();
while(1)
{
GetVoltage = GetSingleChannelVoltage_POLL(FL_ADC_EXTERNAL_CH0);
}
}
转换函数 uint32_t GetSingleChannelVoltage_POLL(uint32_t channel)
{
uint32_t Get122VSample, GetChannelVoltage;
uint64_t GetVSample;
Get122VSample = GetVREF1P2Sample_POLL();
GetVSample = GetSingleChannelSample_POLL(channel);
GetChannelVoltage = (GetVSample * 3000 * (ADC_VREF)) / (Get122VSample * 4095);
// 转换结果
return GetChannelVoltage;
}
初始化 void MF_Config_Init(void)
{
/*FUNCTION CALL*/
MF_ADC_Common_Init();
MF_ADC_Init();
}
void MF_ADC_Common_Init(void)
{
/*IO CONFIG*/
FL_ADC_CommonInitTypeDef CommonInitStruct;
CommonInitStruct.clockSource = FL_RCC_ADC_CLK_SOURCE_RCHF;
CommonInitStruct.clockPrescaler = FL_RCC_ADC_PSC_DIV8;
FL_ADC_CommonInit(&CommonInitStruct );
}
void MF_ADC_Init(void)
{
FL_GPIO_InitTypeDef GPIO_InitStruct;
FL_ADC_InitTypeDef defaultInitStruct;
GPIO_InitStruct.pin = FL_GPIO_PIN_9;
GPIO_InitStruct.mode = FL_GPIO_MODE_ANALOG;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.pull = FL_DISABLE;
GPIO_InitStruct.remapPin = FL_DISABLE;
FL_GPIO_Init( GPIOC, &GPIO_InitStruct );
defaultInitStruct.conversionMode = FL_ADC_CONV_MODE_SINGLE;
defaultInitStruct.autoMode = FL_ADC_SINGLE_CONV_MODE_AUTO;
defaultInitStruct.waitMode = FL_ENABLE;
defaultInitStruct.overrunMode = FL_ENABLE;
defaultInitStruct.scanDirection = FL_ADC_SEQ_SCAN_DIR_BACKWARD;
defaultInitStruct.externalTrigConv = FL_ADC_TRIGGER_EDGE_NONE;
defaultInitStruct.triggerSource = FL_ADC_TRGI_PA8;
defaultInitStruct.fastChannelTime = FL_ADC_FAST_CH_SAMPLING_TIME_4_ADCCLK;
defaultInitStruct.lowChannelTime = FL_ADC_SLOW_CH_SAMPLING_TIME_192_ADCCLK;
defaultInitStruct.oversamplingMode = FL_ENABLE;
defaultInitStruct.overSampingMultiplier = FL_ADC_OVERSAMPLING_MUL_16X;
defaultInitStruct.oversamplingShift = FL_ADC_OVERSAMPLING_SHIFT_4B;
FL_ADC_Init(ADC,&defaultInitStruct );
}
简单看了代码,编译下载~~~~
这里需要注意一下,我使用的是SW接口下载程序,但这个板子的下载口线序,与之前的线序定义不太一样,swio与swclk需要互换一下,多了个TM引脚,不太确定是干什么用的,直接跳过去,悬空处理。
之前的下载线拔下来,
仿真看一下 把GetVoltage添加到Watch窗口,观察先变量的值。
至此,资料下载,环境搭建,代码编译仿真,基本上是跑通了, 后面就要慢慢熟悉板子和例程风格了,同时推荐一下“魔方”。 也是在上面的连接里直接就能看到
现在各大厂商,为了给用户提供快速的开发验证体验,接连推出各种代码初始化生成工具, 这个的亮点是,在线的。 本来以为在线的工具会卡的要命,我简单试了一下,反应和交互性还可以,都在接受范围内, 所以,值得一试。
四、故作仙风道骨,假装吐吐槽
第一次接触这个开发板,例程的风格还不是很熟悉,把前期的开发准备工作,粗略的走了一遍,整体上感觉还不错。 有些无伤大雅的小细节感觉有所欠缺,就是官网的资料中版本的分类有些模糊,可能是更改的并不多,并且是通用的,不影响使用,但是对于初学者来说,相差一点,都会心虚。当然理解其中资料整理的麻烦之处,每个搞开发的,都很难逃脱开文件归档的厄运。 建议至少出具了说明文档,记录下更新的过程,打消下使用者的疑虑就好。
五、感谢是真的,多了是废话,汇总一句。 最终,感谢有幸获得这次体验资格,祝微电子和光大工程师朋友们,蒸蒸日上!!
|