最近在用STM8S103的IC 才8K的Flash,以前用惯了库文件但用到后面发现资料很紧张,所以花了点时间搞了个较灵活的代码,它可以较好的解决以上问题,附件用有它的程序。
它的其本思路是:先用库文件初始化后,把寄存器与复位值比较,值不相同的用串口打印出C语言代码,然后手动复制到程序中去取代以前的库文件初始化。
如下面就是对GPIOA代码自动生成程序:
if(GPIO_ODR_RESET_VALUE != GPIOA->ODR) printf("\r\n\tGPIOA->ODR=0x%x;\r\n",(int)GPIOA->ODR);
if(GPIO_DDR_RESET_VALUE != GPIOA->DDR) printf("\tGPIOA->DDR=0x%x;\r\n",(int)GPIOA->DDR);
if(GPIO_CR1_RESET_VALUE != GPIOA->CR1) printf("\tGPIOA->CR1=0x%x;\r\n",(int)GPIOA->CR1);
if(GPIO_CR2_RESET_VALUE != GPIOA->CR2) printf("\tGPIOA->CR2=0x%x;\r\n",(int)GPIOA->CR2);
附件中"Reduce.h"就是它的配置文件。
先要开启定义的打印功能,如果资源不够可以分四次依次开启,
#define BUILER_GPIO_EXTI_ITC_BEEP_ADC
#define BUILER_I2C_SPI_UART_CAN_CLK
#define BUILER_TIM
#define BUILER_IWDG_WWDG_AWU_FLASH_OPT_RST
编译下载后将MCU的串口联到PC机,运行后就可从串口中得到代码,然后Copy到"Reduce.c"的 MCU_init_simplify()中。
全部搞定后取消定义的打印功能,然后把 USE_REDUCE_INIT值改为1 就可以了。大部分都测试过,有错误不足请陆续上传。 |