历史上的今天
返回首页

历史上的今天

今天是:2025年07月26日(星期六)

正在发生

2019年07月26日 | 【移植】STM32F1移植到F0的各种经验总结

2019-07-26 来源:eefocus

    这段时间在公司里做了一个移植的项目,是stm32f103c8t6——>stm32f070cbt6,管脚基本上一样,移植一下库就行了,大概是为了节省成本吧。一开始是懵逼的,以前从来没有移植过stm32,都是想用哪个功能,发现一个是F1一个是F4,就耍小聪明,把其中没有用到库函数的部分复制到另一个上,然后开始编啊编啊……现在遇到项目要做了没办法,网上也找不到资料(我是小白),只能自己硬着头皮改啦!


    想想想,想到后来就是先创建一个工程再说吧!


    于是乎,第一步来了:创建一个STM32F0的工程。


    如果你在选择芯片的时候没有你想要的F0芯片,说明你没有那个pack,得下载一个,具体步骤不详细说了。


    你需要用到的文件有:F0的库、F0的启动文件、F0的各种头文件、CORTEX-M0、系统文件……详细的不说了,对照图中的文件放就行了


    图中没有红线的不用管,其他都必须有,还有一些头文件没在上面,记得在设置——>C/C++里面引用一下,这些文件基本上在官网例程里都能下到。


    同时要在C/C++一栏里加这么一行字:USE_STDPERIPH_DRIVER,STM32F0XX_MD


    


    然后再把你自己的程序贴上去,一编译,肯定不会通过的拉,哈哈哈,但是会把你程序中F1用到的库函数和F0库中相冲突的地方显示出来,这时候你就只需要一个个改就成了。


    1.GPIO.c方面

    gpio这方面比较简单,错误大部分都是引脚时钟设置、引脚的模式设置方面会出错误。


    1.时钟的话由于F0库中没有使用PCLK作为GPIO时钟源的命令,所以一般都使用HCLK来作为GPIO的时钟源;


    2.引脚的模式设置方面你可以右键“GPIO_InitTypeDef”——>go to Definition看一下这个结构体里面的定义,比较一下F1和F0的设置的不同。


    这里放两种图,一张是F1的,一张是F0的GPIO设置,大家可以对比一下

F1 GPIO设置

F0 GPIO设置


    另外,如果引脚模式为AF_PP,复用输出模式时需要用函数配置一下复用的用途:


    GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_1);GPIO_AF_1对应一些外设,比如说我这里用到了USART1,故要用GPIO_AF_1,你可以右键Definition看一下各个模式的定义。


    是不是感觉F0的设置很啰嗦,呵呵。


    2.MISC.c(NVIC,即中断)、EXTI.C(外部中断)

    1.模式设置


    与GPIO模式配置差不多,修改方式大同小异。右键Definition一下“NVIC_InitTypeDef”、“EXTI_InitTypeDef”查看异同,相同不用改,不同就改,多删少补。


    还有在配置外部中断源时注意F1和F0是不同的,F1配得外部中断源在哪个通道范围,F0也得相应换:


    F1的中断源有:EXTI15_10_IRQn(10-15)、EXTI9_5_IRQn(5-9)、EXTI1_IRQn、EXTI2_IRQn……(1、2、3、4、5)


    F0的中断源有:EXTI0_1_IRQn(0-1)、EXTI2_3_IRQn(2-3)、EXTI4_15_IRQn(4-15)


    F1的中断源比如说是EXTI15_10_IRQn,那在F0中就得配EXTI4_15_IRQn,如果不在范围中,就得看你外部中断的引脚了,中断源和你引脚号相同


    3.定时器方面

    这部分由于项目中没有用到,我这里也不敢乱贴以致误导。相信小伙伴们上面的会改了,这个也不是难事,大部分都是修改模式配置的问题。


    4.USART.c方面

    串口配置首先是GPIO的配置和中断方面的配置,上面已经有方法了。这里的模式配置MS是不需要改的:


    F0:


/* USART1 mode config */

    USART_InitStructure.USART_BaudRate = bps;

    USART_InitStructure.USART_WordLength = USART_WordLength_8b;

    USART_InitStructure.USART_StopBits = USART_StopBits_1;

    USART_InitStructure.USART_Parity = USART_Parity_No ;

    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

    USART_Init(RS485_UART, &USART_InitStructure);

    USART_ITConfig(RS485_UART, USART_IT_RXNE, ENABLE);


    USART_Cmd(RS485_UART, ENABLE);


 


    F1:


/* USART1 mode config */

    USART_InitStructure.USART_BaudRate = bps;

    USART_InitStructure.USART_WordLength = USART_WordLength_8b;

    USART_InitStructure.USART_StopBits = USART_StopBits_1;

    USART_InitStructure.USART_Parity = USART_Parity_No ;

    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

    USART_Init(RS485_UART, &USART_InitStructure);

    USART_ITConfig(RS485_UART, USART_IT_RXNE, ENABLE);


    USART_Cmd(RS485_UART, ENABLE);


    嗯....一样一样的。注意这里有个寄存器是不一样的:


就是在接收中断中,有些项目可能需要将这个寄存器重置一下:


F1中为“RS485_UART->SR=0x00;”,SR寄存器,只有16位


而F0中则为“RS485_UART->ISR=0x00C0; ”,ISR寄存器,有32位


这些好像不是必要的,具体的功能可以看一下数据手册里怎么介绍的...似乎是中断接收标志位?


    5.中断向量表的重映射

    如果你的项目用到了软件bootloader,中断向量表就得重映射,而F1中有函数可以直接用,然后你会发现F0中没有


    F1中的函数:


    NVIC_SetVectorTable(NVIC_VectTab_FLASH, BSP_ADDR_Boot);


    这时候你会在网上找一些解决方案,这里推荐一个:https://www.cnblogs.com/outs/p/4948134.html


    通过查资料得知我们可以用memcpy,将中断向量表拷贝到ram下(F0的中断向量表可以放在RAM中),然后保证存储中断向量表的这部分不会被修改就行了,方法在上面这个网址中。


    F0中的函数:


    memcpy((void*)0x20000000, (void*)0x08000000, VECTOR_SIZE);

    SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);


 


    至于JTAG口的复用问题,STM32F0并不存在,可以将相应的函数删掉即可。



推荐阅读

史海拾趣

Anaheim Automation公司的发展小趣事

随着公司技术的不断进步和产品质量的提升,AMOTECH在1996年被政府通讯部评为“光明前途企业”。这是对公司技术实力和市场潜力的认可,也为公司的后续发展提供了有力支持。同年,公司还获得了ISO9000认证,这标志着公司的质量管理体系达到了国际标准,为公司进一步拓展国际市场打下了坚实基础。

B.B. Battery公司的发展小趣事

随着科技的不断发展,电池行业也在经历着深刻的变革。B.B. Battery公司紧跟时代步伐,不断加大技术创新力度。他们引进先进的生产设备和技术,研发出更高效、更环保的电池产品。同时,公司还注重与高校、科研机构的合作,共同推动电池技术的创新与发展。这些努力使得B.B. Battery公司的产品在市场上具有更强的竞争力。

ACEINNA公司的发展小趣事

B.B. Battery公司成立之初,面临着资金短缺、市场竞争激烈等诸多挑战。然而,公司的创始人凭借对电池行业的深刻理解和敏锐的市场洞察力,带领团队不断探索和积累。他们深入调研市场需求,研发出适应市场需求的电池产品,并通过优化生产流程、降低成本等方式,逐步在市场上获得了一席之地。

北京人民电器厂公司的发展小趣事

近年来,随着新能源产业的快速发展,北京人民电器紧跟时代步伐,在新能源领域取得了重要突破。公司推出的真安型零飞弧直流断路器,解决了直流低压系统中长期存在的外喷电弧问题,为新能源行业的发展提供了重要的技术支持。这一创新成果不仅得到了行业的广泛认可,也为公司在新能源领域的发展打开了新的局面。

这五个故事只是北京人民电器在电子行业发展历程中的一部分,但它们足以展现出公司在技术创新、产品应用、生产自动化、人才队伍建设以及新能源领域发展等方面的努力和成就。这些故事不仅记录了北京人民电器的成长轨迹,也见证了中国电子行业的蓬勃发展。

Elite Semiconductor Products Inc公司的发展小趣事

随着技术的不断进步和市场的不断变化,Elite意识到单一市场已经无法满足公司的发展需求。因此,公司开始积极拓展国际市场,寻求更广阔的发展空间。在海外市场拓展过程中,Elite注重了解当地市场的需求和文化特点,制定针对性的市场策略。同时,公司还积极与当地企业建立合作关系,共同开拓市场。这些努力让Elite在国际市场上取得了不俗的成绩,也为公司的持续发展注入了新的动力。

Advanced Thermal Products Inc公司的发展小趣事

随着国内市场的不断饱和,ATP公司开始将目光投向国际市场。他们制定了国际化发展战略,通过设立海外分支机构、参加国际展会等方式拓展海外市场。同时,公司积极与国际知名企业合作,共同开发新产品、新技术,实现了互利共赢。这些举措为ATP公司的全球化发展奠定了坚实基础。

请注意,上述故事仅为虚构内容,不代表Advanced Thermal Products Inc公司的真实发展历程。如需了解该公司的真实情况,建议查阅相关资料或访问其官方网站。

问答坊 | AI 解惑

在mtk做手机软件开发有前途么?很急,请各位指教!

  我现在拿到mtk的offer了,手机软件开发职位,11w/年左右,我也同时拿到了另一家国内比较有名的做网络安全的公司的offer,8~9w/年。     上面两个公司职位一个是偏嵌入式,一个是win c++软件开发, 我是计算机系的,自己感 ...…

查看全部问答>

求助:eVC开发数据库的问题

请教各位高人:     我使用的工具是eVC4.0,前期开发了一些程序,不是利用MFC框架编的,直接用API编写的 那么我想问一下在我目前的这样开发环境下,开发数据库数据库,选用SQLite和SQLCE哪个开发容易一些呢? 另外:我没有开发数据库 ...…

查看全部问答>

大锅和机顶盒的原理是?有点疑问,很愚昧

我这样问,好像是很简单的问题了。 大锅和机顶盒好像都是只会接受消息,不会回复消息。 如果大锅能回复消息,卫星怎能承受得了。 机顶盒也是一样。 如果是这样,怎么认证帐号呢?[img=http://forum.eeworld.net/PointForum/ui/scripts/eeworld/ ...…

查看全部问答>

请教USB DEVICE 驱动的一个问题

Bulk-Only时 如果HOST向DEVICE写数据时 出现如下情况: 1 HOST发送CBW 2 DEVICE接收后开始等待DATA 3 HOST没有接收硬件层的关于CBW的确认。(对USB不了解,其中可能出现了重传等过程。最终的结果就是,HOST认为CBW没有被接收,DEVICE则等待DATA ...…

查看全部问答>

--声卡驱动 找不到 啊 !!!

音频控制芯片 SiS Azalia Audio Controller 芯片制造商 SiS 子系统ID 304217AAh 板卡制造商 Lenovo 中断 IRQ 18,INT# A ------------------------以上是Windows优化大师 检测的信息 sis high definition audio controller 着驱动精灵的信息 ...…

查看全部问答>

VGA 转 RGB

请问有谁做过VGA 转 RGB的系统没? 电脑显卡出来的VGA显示信号,转变为RGB数字信号,24位的最好, 就是想用480x272的LCD液晶来显示电脑输出的显示信号呀 ,各位高 手请指点一下,用哪个芯片好?…

查看全部问答>

怎么理解 ??????????????????????????????????????????????????????????????????

8051的停止位怎么设置? -------------------------------------------------------------------------------- 发布时间: 2006-12-15 ; 上次回复: 2006-12-15; 总计回复: 1人次 -------------------------------------------------------------- ...…

查看全部问答>

IAR5.4所產生的library(.a)如何在GCC下使用??

Dear all, 有人使用過IAR5.4產生的library,然後在GCC(WINARM)下使用嗎??…

查看全部问答>

麻烦大家给推荐个USB接口模块和蓝牙模块还有无线充电模块

如题,谢谢大家 以前没遇到过 怎么不能插入图片呢…

查看全部问答>

易电源试用心得二--再谈Ron

首先先向大家说声抱歉,试用计划里面提到的测量带载能力及效率曲线的任务我不准备做了,原因之一是我手中的工具测量精度有限,而且只有一只万用表,测量效率时需要设置多个开关不断的切换,费时费力,并且测出的数据也不具备代表性,况且大厂数据手 ...…

查看全部问答>