您的当前位置:首页赤菟V307彩蛋之可配置Flash和SRAM

赤菟V307彩蛋之可配置Flash和SRAM

2022-09-04 来源:乌哈旅游
⾚菟V307彩蛋之可配置Flash和SRAM

⾚菟V307彩蛋之可配置Flash和SRAM

⾚菟V307(CH32V307)是⼀款RISC-V内核的MCU,搭载的是沁恒⾃研RISC-V内核青稞V4F,最⾼主频144MHz,⽀持单精度浮点运算(FPU)。通常官⽹介绍Flash⼤⼩为256 KB,SRAM⼤⼩为64 KB。仔细阅读应⽤⼿册发现,其Flash和SRAM的⼤⼩⽀持配置,具体配置项如下:

192 KB Flash + 128 KB SRAM224 KB Flash + 96 KB SRAM256 KB Flash + 54 KB SRAM288 KB Flash + 32 KB SRAM

彩蛋1

RAM最⾼可配置到128 KB,直接翻倍,可以撸起袖⼦敲代码啦,再也不⽤担⼼RAM不够啦~

其实⾚菟V307内部有⼀块320 KB SRAM,分为A、B两块,A、B块的⼤⼩由⽤户选择字的user的SRAM_CODE_MODE 位决定,A块负责存放⽤户代码,B块留作单⽚机真正的SRAM,每次上电运⾏时,内部⾃动从Code Flash中加载A块⼤⼩的⽤户代码运⾏。当然⽤户代码的实际Flash和SRAM⼤⼩不要超出配置的范围,否则会导致程序⽆法运⾏等问题。

实际在操作Flash时,也不会有Flash等待的问题。

彩蛋2

细⼼的⼩伙伴或许会发现,V307 Flash最⼤配置为288 KB,⽽Code Flash的⼤⼩为488 KB,这也是隐藏的彩蛋哦,剩下的200 KB Flash可以当作存储⽤,不过需要注意该处Flash等待的问题。

配置⽅法

既然⾚菟V307的Flash和SRAM是可配置的,那么聊聊配置的⽅法吧!

(1)WCHISBTool配置

step 1:切换启动模式,BOOT0 = 1,BOOT1 = 0

step 2:通过WCHISPTool⼯具配置⽤户选择字,具体步骤见下图step 3:切换启动模式,BOOT0 = 0,BOOT1 = 0

(2)⽤户代码配置

typedef enum{

FlASH_192_SRAM_128 = 0, FLASH_224_SRAM_96, FLASH_256_SRAM_64, FLASH_288_RAM_32} FLASH_SRAM_DEFIN;

//note: this operation will take effect after reset

void Config_Flash_SRAM(FLASH_SRAM_DEFIN SetFlashSRAM){

uint8_t UserByte = FLASH_GetUserOptionByte() & 0xff; //get user option byte switch(SetFlashSRAM) {

case 0:

UserByte &= ~(0xc0); // SRAM_CODE_MODE = 00 break; case 1:

UserByte &= ~(0xc0); // SRAM_CODE_MODE = 00 UserByte |= 0x7f; // SRAM_CODE_MODE = 01 break; case 2:

UserByte &= ~(0xc0); // SRAM_CODE_MODE = 00 UserByte |= 0xbf; // SRAM_CODE_MODE = 10 break; case 3:

UserByte |= 0xff; // SRAM_CODE_MODE = 11

break; default: break; }

FLASH_Unlock();

FLASH_ProgramOptionByteData(0x1ffff802, UserByte); FLASH_Lock();}

/********************************************************************* * @fn main *

* @brief Main program. *

* @return none */

int main(void){

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); Delay_Init();

USART_Printf_Init(115200);

printf(\"SystemClk:%d\\r\\n\

Config_Flash_SRAM(FLASH_288_RAM_32); //配置Flash为288 KB,SRAM为32KB ,复位后⽣效

printf(\"userByte = %02x \\r\\n\ while(1) { ; }}

注意以上两种配置⽅式完成后,还需要同步⽤户⼯程代码的ld链接⽂件中Flash 和 SRAM的⼤写,与⽤户选择字配置的⼤⼩保持⼀致。需要了解RISC-V MCU ld链接⽂件的可以查看该贴:

因篇幅问题不能全部显示,请点此查看更多更全内容