盤點(diǎn)STM32的國產(chǎn)替代者(2)
一、搞點(diǎn)資料看看,電路圖要搞到
之所以推薦下載這個(gè)壓縮檔,是因?yàn)槔锩嬗幸粋€(gè)非常好的說明文件:
這個(gè)說明文件非常棒,介紹了每個(gè)目錄的內(nèi)容,為制作這個(gè)說明文件的小哥哥點(diǎn)贊?。?!
電路圖在這個(gè)壓縮檔有:
1. LED沒有直接連到MCU引腳,需要準(zhǔn)備連接導(dǎo)線;
2. 燒錄調(diào)試接口貌似ST-LINK,準(zhǔn)備一個(gè)高仿ST-LINK燒錄器即可;
二、搭建環(huán)境,芯片的PACK安裝
由于我的燒錄器是ST-LINK,在配置中選擇即可:
選擇一下芯片算法,64K滴:
三、搞定代碼,點(diǎn)亮屏幕
void GPIO_Toggle_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init();
GPIO_Toggle_INIT();
while(1)
{
Delay_Ms(500);
PAout(0) ^= (1<<0);
}
}
四、學(xué)習(xí)將視頻轉(zhuǎn)GIF,看著方便
為了方便和朋友們交流,將源代碼上傳上來,下載請(qǐng)點(diǎn)擊閱讀原文。
2. 代碼風(fēng)格和ST一樣一樣滴,上手也快
3. 外設(shè)功能和ST有細(xì)微差異,看過手冊(cè)也都能明白
4. 這塊開發(fā)板的其它功能,待后續(xù)慢慢搞,后面準(zhǔn)備搞個(gè)U盤自動(dòng)更新功能,哈哈
習(xí)慣了STC和Arduino的串口下載,對(duì)于arm32-M3指令集的國產(chǎn)芯片CH32F103C8T6,也在摸索著使用串口下載。在開發(fā)板的包里,干貨滿滿,但是手頭上沒有SWD接口的編程器。找了資料,STM32F103是可以用串口下載的。前提是,你要連接好PA9(UART1_TX),以及PA10(UART1_RX)到USB-TLL轉(zhuǎn)接板,比如CH340G的小板。
另外,需要設(shè)置BOOT啟動(dòng)的方式。跳線接法:BOOT1 -->GND, BOOT0-->VCC,這樣才會(huì)從芯片內(nèi)的出廠固件內(nèi)存引導(dǎo)啟動(dòng),這里相當(dāng)于Arduino的BootLoader的功能。平常的接法是BOOT0-->GND,這是從Flash區(qū)運(yùn)行啟動(dòng)代碼,跳過了廠家代碼區(qū)。
2.硬件準(zhǔn)備好后,需要軟件。下載WCH_ISP_tool(2.8)下載鏈接.
安裝好后,界面如圖。
注意要選擇CH32F1系列標(biāo)簽,Keil MDK編譯器生成的Hex文件,需要再用戶程序文件框內(nèi)選擇。
注意可以多試幾次,比如插拔USB轉(zhuǎn)串口小板。還有當(dāng)出現(xiàn)“解除寫保護(hù)”,需要先點(diǎn)擊“解除保護(hù)”按鈕。之后再點(diǎn)擊下載。
4.測(cè)試UART_Printf串口打印功能
開發(fā)板的串口調(diào)試功能可以方便的輸出一些具體的信息,作為程序運(yùn)行的重要參考。這里我測(cè)試了math.h的正弦函數(shù)計(jì)算功能。算是發(fā)揮一下32位CPU的優(yōu)勢(shì)。想起來計(jì)算氫彈的理論的501機(jī),每秒不過幾十萬次加法運(yùn)算。這個(gè)機(jī)子已經(jīng)遠(yuǎn)遠(yuǎn)超過了當(dāng)年的龐然大物。
測(cè)試的源碼:
main.c
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
Delay_Init();
USART_Printf_Init(115200); /* printf using USART1 */
printf("SystemClk:%d\r\n",SystemCoreClock);
printf("This is printf example\r\n");
printf("sin(pi/3)=%f",sin(PI/3));
while(1)
{
}
}
附閱讀材料:中國計(jì)算機(jī)60年國產(chǎn)計(jì)算機(jī)前史
點(diǎn)燈需要注意的是,led小燈沒有連接到mcu的引腳上,需要自己用杜邦線連接一下
代碼也很簡單,有stm32經(jīng)驗(yàn)的很容易
/********************************** (C) COPYRIGHT *******************************
* File Name : main.c
* Author : WCH
* Version : V1.0.0
* Date : 2020/04/30
* Description : Main program body.
*******************************************************************************/
#include "debug.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
GPIOx->OUTDR ^= GPIO_Pin;
}
int main(void)
{
Delay_Init();
//USART_Printf_Init(115200);
//printf("SystemClk:%d\r\n",SystemCoreClock);
LED_Init();
while(1)
{
Delay_Ms(1000);
GPIO_TogglePin(GPIOA, GPIO_Pin_0);
}
}
添加串口1,通過串口接收中斷來接收數(shù)據(jù),接收到回車鍵,一幀數(shù)據(jù)結(jié)束。
主程序里處理串口數(shù)據(jù)(或丟棄或返回)
用其他usb轉(zhuǎn)ttl工具,看看顯示
串口調(diào)試助手顯示結(jié)果
你認(rèn)為這款開發(fā)板如何?之后嵌入式ARM還會(huì)繼續(xù)登載國產(chǎn)替代者的更多測(cè)評(píng)信息。
▍ 推薦閱讀
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!