1.开箱
最近了解到赛普拉斯有一种芯片,属于PSoC系列,与传统MCU不同,有点类似跨界芯片,于是就买来玩玩了,老实说用完还是很特别的,因为我没有用过FPGA,不确定是不是FPGA的开发流程(有玩过FPGA的老哥可以说说)
那么为啥选择这一块板子呢?
首先是CY8C42有可编程模拟和数字模块,这是用这个芯片最核心的地方
还有就是好买啊,我在咸鱼上100能拿到手
这是实际的样子,还不错,挺新的
如果大家想看看PSOC4系列其他芯片的特点可以去这个网站,介绍的比较齐全
Cypress PSoC® 4微控制器芯片方案 - 产品亮点 - DigiKey得捷电子
2.安装IDE与创建工程
首先我们要去下载官方的软件Psoc creator,链接在下面
PSoC™ Creator - Infineon Technologies
然后就是下载安装一条龙,没啥好说的
然后我们找到软件双击打开
进到主界面后点击生成一个工程
在跳出来的窗口中选择连接的芯片,选择Psoc4再最后一个对话框中我们可以看到有非常多的4200系列,当选择一个芯片后我们可以在对话框的最上端看到芯片,我这里是4245芯片,大家看到合适的就行。
点击next后在下一个对话框里选择empty schematic
然后填入工工作区名称,路径,工程名称,之后点击finish
当我们进入到一个类似于空白的原理图就表示我们工程创建成功了,我这里是因为把周边的框都折叠起来了,所以比较空,第一次周边应该都是各种框。
3.导入官方例程
依然是创建新工程,并选择芯片
选择code example
然后就是官方的例程了,我们可以在filter输入我们要找的内容
比如最简单的led
点击next,这是你要导入的路径
点击finish,可以看到例程导入成功了
4.环境介绍
在开始前我们首先要对整个工程进行编译,在对话框的左上角可以找到
这是没有编译前的工程
这是编译后的工程
可以明显看到多出了非常多的东西,这些是我们使用芯片必不可少的东西,关于这些文件的用法,一会我来具体介绍
下图我所框出来的东西都是和硬件相关的,Psoc的使用并非完全由程序控制,反而是由硬件导向的,我们在写程序前必须要先配置相关硬件,再由IDE根据我们配置的硬件创建相关程序文件,我们的程序文件只是用来控制硬件何时开启的,这一点与传统的MCU非常不同
5.初始化
5.1管脚配置
首先我们先配置管脚,双击TopDesign(下面称为原理图)
然后我们在右侧器件对话框里搜索pin,因为我们是led输出,因此这里找到数字输出管脚
点击并拖拽到原理图空白位置
之后我们双击管脚进行配置
我们对管脚进行修改,修改名称,模式设置为上拉模式,并设置额外延展
点击OK,我们可以看到管脚修改成功了
然后我们找到左侧pins,双击进入
可以看到我们刚刚创建的管脚
但是此时还没有关联到实际的管脚,我们要映射到物理的管脚上
在开发板上,板载了一个RGB灯,原理图如下
这里我以P1.6介绍了,也就是红灯
我们在ide的右侧点击port,并选择P1.6
可以看到管脚已经映射上去了
我们重新回到原理图界面,可以看到,管脚已经改为1.6
5.2PWM模块
下一步我们PWM模块
在元器件框里搜索PWM
拖入原理图中
双击pwm模块来进行设置
我们先可以设置名称
然后我们对对PWM进行设置
点击PWM页面,进入下图界面
我们需要对下图的这些参数进行设置
此处的2000表示增加到2000就复位,1000就是PWM值,那么占空比也就是50%
点击OK完成设置
5.3时钟
我们的PWM需要时钟源,因此找到clock
拖到原理图上
双击clock设置频率
点击OK完成设置
5.4中断
在对话框中搜索interrupt,找中断
拖到原理图中
双击中断进行设置,我们只需要设置名称
原理图中也同步过来了
5.5连接原理图
连接线在左侧
按照下图连接
6.程序
在开始前我们要先编译一些工程,并生成对应的文件,这些根据我们刚刚设置的模块创建的,也是我们一会写程序根据。
双击左侧main.c打开程序
首先是添加头文件,比如这里我们模块的名称是pwm
假如我们在原理中将模块重新改名为AA,可以看到PWM消失了,取而代之的是AA,如果这时添加PWM头文件就会报错
下面我们将各类头文件添加进去
下面我们就可以开始写程序了
这里并没有什么固定的函数,因为所有函数都是根据你的硬件原理图而做出来的函数,大家在复杂项目里肯定不一样!!
我们看初始化,这一句是初始化中断
这个函数原型在PWM中断文件里(我这里是PWM_TC)
参数则是根据你写的来,保证这里一样就行,初始化的参数是根据中断服务函数来的,中断服务函数我一会介绍
然后是开启PWM
这个函数在PWM文件里(我这里是PWM.c)
最后我们来看中断服务函数,函数名是固定的,这是系统决定的(类似STM32)然后参数就是给初始化用的
之后就是清空PWM中断,在PWM文件里
这个函数的参数是固定的,是系统决定,无论你用什么都一样
7.编译与下载
编译的时候我们总是能看到是编译其他工程
我们选择我们主要编译的工程,选择第一个工程,set it active,可以看到需要的工程加粗了
此时编译的就是我们要的工程了
编译完成后我们可以下载和仿真了
8.效果
程序
#include "project.h"
#include "PWM.h"
#include "RGB_R.h"
#include "PWM_TC.h"
CY_ISR(TC_ISR_Handler)
{
/* Interrupt is cleared */
PWM_ClearInterrupt(PWM_INTR_MASK_TC);
}
int main(void)
{
/* Enable global interrupts. */
CyGlobalIntEnable;
/* Enable interrupt ***ponent and set up handler */
PWM_TC_StartEx(TC_ISR_Handler);
/* Start the PWM ***ponent */
PWM_Start();
while(1)
{
}
}
/* [] END OF FILE */
原理图
实物
可以看到红灯按照既定程序闪烁了
9.小结
官方对于程序也给出了对应的教程,我们导入对应的工程后也能出现对应的PDF
这就是官方给出的教程
总的来说Psoc的开发与传统的MCU开发完全不是一个思路,可以说非常独特,强调的核心并非程序而是硬件,感觉非常类似FPGA了(吗?)我在网上完全搜不到这类的教程,后续我再看看可编程模拟与数字模块,来看看有何独特的。