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 component and set up handler */PWM_TC_StartEx(TC_ISR_Handler);/* Start the PWM Component */PWM_Start();while(1){}
}
/* [] END OF FILE */
原理圖
實物
可以看到紅燈按照既定程序閃爍了
9.小結
官方對于程序也給出了對應的教程,我們導入對應的工程后也能出現對應的PDF
這就是官方給出的教程
總的來說Psoc的開發與傳統的MCU開發完全不是一個思路,可以說非常獨特,強調的核心并非程序而是硬件,感覺非常類似FPGA了(嗎?)我在網上完全搜不到這類的教程,后續我再看看可編程模擬與數字模塊,來看看有何獨特的。