首頁 > 評測 > 基于PikaScript在MM32平臺上部署Python開發(fā)環(huán)境
基于PikaScript在MM32平臺上部署Python開發(fā)環(huán)境
- [導(dǎo)讀]
- MicroPython是Python3的精簡實現(xiàn),包括Python標(biāo)準(zhǔn)庫的一小部分,經(jīng)過優(yōu)化可在微控制器和受限的環(huán)境中運行,在官方提供了相應(yīng)的
- 準(zhǔn)備模板工程
- 獲取PikaScript源碼和工具集
- 預(yù)編譯模塊
- 添加源碼
- 調(diào)整堆棧大小
- 啟動PikaScript
- void MCU_InitClock(void)
- {
- /* 使能內(nèi)部高速時鐘HSI */
- RCC->CR |= RCC_CR_HSION_MASK;
- /* 等待內(nèi)部高速時鐘HSI穩(wěn)定 */
- while(RCC_CR_HSIRDY_MASK != (RCC->CR & RCC_CR_HSIRDY_MASK));
- /* 選擇HSI輸出用作系統(tǒng)時鐘 */
- RCC->CFGR = RCC_CFGR_SW(0u);
- /* 等待系統(tǒng)時鐘選擇狀態(tài)穩(wěn)定 */
- while(RCC_CFGR_SWS(0u) != (RCC->CFGR & RCC_CFGR_SWS_MASK));
- /* 復(fù)位除HSI之外的所有時鐘 */
- RCC->CR = RCC_CR_HSION_MASK;
- RCC->CIR = RCC->CIR; /* 清除中斷標(biāo)志位 */
- RCC->CIR = 0u; /* 禁卡相應(yīng)的中斷 */
- /* PWR/DBG時鐘使能 */
- RCC->APB1ENR |= (1u << 28u);
- /* 如果系統(tǒng)時鐘需要達(dá)到最大頻率120MHz時, 需要將VOS設(shè)置為1.7V */
- PWR->CR1 = (PWR->CR1 & ~PWR_CR1_VOS_MASK) | PWR_CR1_VOS(3u);
- /* 使能外部高速時鐘HSE */
- RCC->CR |= RCC_CR_HSEON_MASK;
- /* 等待外部高速時鐘HSE穩(wěn)定 */
- while(RCC_CR_HSERDY_MASK != (RCC->CR & RCC_CR_HSERDY_MASK));
- /* PLL1 = HSE * (MUL + 1) / (DIV + 1)
- = 12MHz * 20 / 2
- = 120MHz
- */
- RCC->PLL1CFGR = RCC_PLL1CFGR_PLL1SRC(1) | /* 0:HSI作為PLL1時鐘源, 1:HSE作為PLL1時鐘源 */
- RCC_PLL1CFGR_PLL1MUL(19)| /* PLL1倍頻系數(shù) */
- RCC_PLL1CFGR_PLL1DIV(1) | /* PLL1分頻系數(shù) */
- RCC_PLL1CFGR_PLL1LDS(1) | /* PLL1鎖定檢測器精度選擇: 高精度 */
- RCC_PLL1CFGR_PLL1ICTRL(3); /* PLL1輸入時鐘源大于等于8MHz時,推薦設(shè)置值為2'b11
- PLL1輸入時鐘源小于 8MHz時,推薦設(shè)置值為2'b01 */
- /* 使能PLL1 */
- RCC->CR |= RCC_CR_PLL1ON_MASK;
- /* 等待PLL1穩(wěn)定 */
- while((RCC->CR & RCC_CR_PLL1RDY_MASK) == 0);
- /* FLASH時鐘使能 */
- RCC->AHB1ENR |= (1u << 13u);
- FLASH->ACR = FLASH_ACR_LATENCY(4u) | /* 0 : 零個等待狀態(tài), 當(dāng) 0MHz < SYSCLK <= 24MHz
- 1 : 一個等待狀態(tài), 當(dāng)24MHz < SYSCLK <= 48MHz
- 2 : 二個等待狀態(tài), 當(dāng)48MHz < SYSCLK <= 72MHz
- 3 : 三個等待狀態(tài), 當(dāng)72MHz < SYSCLK <= 96MHz
- 4 : 四個等待狀態(tài), 當(dāng)96MHz < SYSCLK <= 120MHz */
- FLASH_ACR_PRFTBE_MASK; /* 預(yù)取緩沖區(qū)開啟 */
- /* 時鐘配置 */
- RCC->CFGR = RCC_CFGR_HPRE(0) | /* AHB 預(yù)分頻系數(shù), HCLK
- 0xxx : SYSCLK 不分頻
- 1000 : SYSCLK 2分頻
- 1001 : SYSCLK 4分頻
- 1010 : SYSCLK 8分頻
- 1011 : SYSCLK 16分頻
- 1100 : SYSCLK 64分頻
- 1101 : SYSCLK 128分頻
- 1110 : SYSCLK 256分頻
- 1111 : SYSCLK 512分頻 */
- RCC_CFGR_PPRE1(0x4) | /* APB1預(yù)分頻系數(shù), PCLK1
- 0xx : HCLK 不分頻
- 100 : HCLK 2分頻
- 101 : HCLK 4分頻
- 110 : HCLK 8分頻
- 111 : HCLK 16分頻 */
- RCC_CFGR_PPRE2(0x4) | /* APB2預(yù)分頻系數(shù), PCLK2
- 0xx : HCLK 不分頻
- 100 : HCLK 2分頻
- 101 : HCLK 4分頻
- 110 : HCLK 8分頻
- 111 : HCLK 16分頻 */
- RCC_CFGR_MCO(7); /* MCO輸出時鐘源選擇
- 000x : 沒有時鐘輸出
- 0010 : LSI時鐘輸出
- 0011 : LSE時鐘輸出
- 0100 : SYSCLK時鐘輸出
- 0101 : HSI時鐘輸出
- 0110 : HSE時鐘輸出
- 0111 : PLL1時鐘輸出
- 1000 : PLL2時鐘輸出 */
- /* ADC1預(yù)分頻(頻率范圍15MHz - 48MHz)
- = PCLK2 / (PRE + 2),要求PRE為偶數(shù),使占空比為50%
- = 60MHz / ( 2 + 2)
- = 15MHz */
- RCC_SetADCClockDiv(ADC1, 2);
- /* ADC1 calibration時鐘分頻(頻率范圍187.5kHz - 1.5MHz)
- = PCLK2 / (PRECAL + 2),要求PRECAL為偶數(shù),使占空比為50%
- = 60MHz / (58 + 2)
- = 1MHz */
- RCC_SetADCClockDiv(ADC1, 58);
- /* 選擇PLL輸出用作系統(tǒng)時鐘 */
- RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_SW_MASK) | RCC_CFGR_SW(2);
- /* 等待系統(tǒng)時鐘選擇狀態(tài)穩(wěn)定 */
- while((RCC->CFGR & RCC_CFGR_SWS_MASK) != RCC_CFGR_SWS(2));
- }
- void MCU_InitUART1(void)
- {
- GPIO_Init_Type GPIO_InitStructure;
- UART_Init_Type UART_InitStructure;
- /* 先配置GPIO, 再配置UART參數(shù), 否則UART ENABLE后會有一個0xFF的異常字節(jié) */
- RCC_EnableAHB1Periphs(RCC_AHB1_PERIPH_GPIOB, true);
- GPIO_PinAFConf(GPIOB, GPIO_PIN_6, GPIO_AF_7); /* PB6 <-> UART1_TX */
- GPIO_PinAFConf(GPIOB, GPIO_PIN_7, GPIO_AF_7); /* PB7 <-> UART1_RX */
- GPIO_InitStructure.Pins = GPIO_PIN_6;
- GPIO_InitStructure.PinMode = GPIO_PinMode_AF_PushPull;
- GPIO_InitStructure.Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_InitStructure.Pins = GPIO_PIN_7;
- GPIO_InitStructure.PinMode = GPIO_PinMode_In_Floating;
- GPIO_InitStructure.Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- RCC_EnableAPB2Periphs(RCC_APB2_PERIPH_UART1, true);
- UART_InitStructure.ClockFreqHz = CLOCK_APB2_FREQ;
- UART_InitStructure.BaudRate = 115200;
- UART_InitStructure.WordLength = UART_WordLength_8b;
- UART_InitStructure.StopBits = UART_StopBits_1;
- UART_InitStructure.Parity = UART_Parity_None;
- UART_InitStructure.XferMode = UART_XferMode_RxTx;
- UART_InitStructure.HwFlowControl = UART_HwFlowControl_None;
- UART_Init(UART1, &UART_InitStructure);
- UART_Enable(UART1, true);
- }
- int fputc(int ch, FILE *f)
- {
- UART_PutData(UART1, (uint8_t)ch);
- while((UART_GetStatus(UART1) & UART_STATUS_TX_DONE) == 0);
- return ch;
- }
- int fgetc(FILE *f)
- {
- while((UART_GetStatus(UART1) & UART_STATUS_RX_DONE) == 0u);
- return UART_GetData(UART1);
- }
- void InitSystem(void)
- {
- MCU_InitClock();
- MCU_InitUART1();
- }
- int main(void)
- {
- InitSystem();
- printf("\r\n");
- printf("\r\nPikaScript PLUS-F5270(MM32F5277E9P) %s %s", __DATE__, __TIME__);
- printf("\r\n");
- printf("\r\n------------------------------------------------------------------");
- printf("\r\n| |");
- printf("\r\n| ____ _ __ _____ _ __ |");
- printf("\r\n| / __ \\ (_) / /__ ____ _ / ___/ _____ _____ (_) ____ / /_ |");
- printf("\r\n| / /_/ // / / //_// __ `/ \\__ \\ / ___// ___// / / __ \\ / __/ |");
- printf("\r\n| / ____// / / ,< / /_/ / ___/ // /__ / / / / / /_/ // /_ |");
- printf("\r\n| /_/ /_/ /_/|_| \\__,_/ /____/ \\___//_/ /_/ / .___/ \\__/ |");
- printf("\r\n| /_/ |");
- printf("\r\n| PikaScript - An Ultra Lightweight Python Engine |");
- printf("\r\n| |");
- printf("\r\n| [ https://github.com/pikastech/pikascript ] |");
- printf("\r\n| [ https://gitee.com/lyon1998/pikascript ] |");
- printf("\r\n| |");
- printf("\r\n------------------------------------------------------------------");
- printf("\r\n");
- PikaObj *pikaMain = pikaScriptInit();
- goto main_loop;
- main_loop:
- pikaScriptShell(pikaMain);
- /* after exit() from pika shell */
- NVIC_SystemReset();
- }
- char __platform_getchar(void)
- {
- return getchar();
- }
- 在線運行Python腳本程序
PikaScript.zip (665.18 KB)
PikaScript_Template.zip (8.2 MB)
-
- 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!
網(wǎng)友評論
- 聯(lián)系人:巧克力娃娃
- 郵箱:board@21ic.com
- 我要投稿
-
歡迎入駐,開放投稿
-
人均百萬?英偉達(dá)中國員工收入曝光! 2024-08-29
-
《黑神話:悟空》玩家硬盤升級攻略:提升游戲體驗,暢享3A大作 2024-08-29
-
數(shù)睿數(shù)據(jù)參加《系統(tǒng)與軟件工程 低代碼開發(fā)平臺通用技術(shù)要求》國家標(biāo)準(zhǔn)編制 2024-08-29
- NRF52810藍(lán)牙數(shù)字耳機找人定制
預(yù)算:¥30005天前
- 125KW模塊式PCS軟硬件外包開發(fā)
預(yù)算:¥1100000015小時前
- 12V汽車啟動電源項目BMS設(shè)計
預(yù)算:¥50000023小時前
- 數(shù)據(jù)可視化軟件 開發(fā)
預(yù)算:¥5000023小時前
- PLC項目調(diào)試修改
預(yù)算:¥100001天前
- 起動電機控制器開發(fā)
預(yù)算:¥1100001天前















