STM32F042替换STM32F103

发布者:平凡梦想最新更新时间:2018-09-02 来源: eefocus关键字:STM32F042  STM32F103 手机看文章 扫描二维码
随时随地手机看文章

因为从事汽车CAN总线及多媒体解码盒,常常需要解一些简单的CAN数据,需要的硬件IO不多,仅仅是CAN+UART,所以最近为了节省成本,也是花了不少心思。

直到最近发现了STM32F042,据介绍,这是带CAN的最小封装芯片。

STM32F042----Cortex-M0内核 。14年初推出的芯片,号称带CAN总线的最便宜的MCU....

仔细查了下手册,果然很适合我的项目,而且价格也便宜,据说RMB 4-6之间,最小TSSOP20封装。这对于汽车小产品来说,简直就是量身定做。

不说了,赶紧动起来,先搭建最小系统,CAN收发器TJA1050+STM32F042+7533就是最简单的了,暂时不要晶振了,虽然CAN的波特率比较高的时候还是需要晶振的,不过一颗晶振也要好多RMB的 。


接下来最麻烦的事情来了,因为习惯使用IAR来做开发,而且积累下来的程序源码都是UCOSII的,网络上的开源代码居然都是KEIL MDK的,这下囧...

不过也没办法,为了节省成本,只好多花点时间了 。

两根礼拜过去,基本都调通,代码架构也移植OK,这下终于可以把103的代码全部移植到F042上了。


有几个要注意的:

1.库函数区别:F042对很多库函数进行了修改,需要注意区别;

2.F042的CAN与103有所不同,需要参考寄存器定义,对于高速波特率,如500K、800K需要外置晶振;

3.无法使用USART1,因为是USART1/CAN/USB复用,这里被CAN占用了;

4.F042的配置文件没有规范化,很多寄存器定义只能从F072里面找,而又不能完全使用F072的配置文件;

5.F042的*it.c文件不规范,其实STM32F0系列的都一样,库函数版本低,没有把中断函数文件做好规范化,导致很多函数定义混乱;

6.时钟安全CSS的内容完全没有提及,虽然从各种资料能找到介绍,但是基本没人用,也没关注到CSS的重要性;

7.F042的功耗要小很多,在同样的时钟8MHZ下,F042电流只有4mA, 103达到9mA以上;

8.F042的USART1是增强型的串口,支持LIN 主从模式,UART2是普通串口,不能用于LIN主模式;

9.P042F4标称FLASH容量是16K,但是实际上容量是32K,F042F6倒是真的只有32K,这搞不懂是为啥;

10.低功耗方面做得很好,比F1系列方便很多。

最后希望F042会和103一样,价格越来越便宜,质量越来越好。

-------------------------------------------------------------

20180330新增问题:

因为用这颗芯片同时做了CAN接口和LIN接口,发现并不能完整移植F1XX系列的LIN函数库。因为F0XX系列的函数库相对F1XX缺失了很多的LIN有关函数,比如有一个函数 Send_Break()是做LIN通信非常必要的却根本没有找到函数定义。为此花了很多时间研究如何实现SendBreak功能,一个月多月了也还是不得其所,最后还是花钱在某宝上找到了一个牛人帮忙解决的。

有些问题看起来很简单,真正做产品的时候还真不是那么回事。

作为诚实劳动成果来说,代码中的每一行代码都凝结了不少人的心血甚至是惨痛教训,还有些祖传代码虽然看起来乱七八糟却是实实在在的铁饭碗,每个程序猿的个人价值都靠这些代码来维持。因此,请那些伸手党请尊重他人的劳动,也珍惜自己的劳动!


关键字:STM32F042  STM32F103 引用地址:STM32F042替换STM32F103

上一篇:使用STM32F103做CAN的收发通信
下一篇:STM32的can总线实验心得

推荐阅读最新更新时间:2024-03-16 16:12

stm32f103 usb驱动电脑无法识别的解决办法
  STM32F系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3。该系列芯片按片内Flash的大小可分为三大类:小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K)。   STM32F103电源管理:   2.0-3.6V供电和I/O引脚   上电/断电复位(POR/PDR)、可编程电压监测器(PVD)   -4-16MHZ晶振振荡器-   内嵌经出厂调教的8MHz的RC振荡器-   内嵌带校准的40KHz的RC振荡器-   产生CPU时钟的PLL-   带校准的32KHz的RC振荡器   STM32F103调试模式:   串行单
[单片机]
基于stm32f103zet6的DS1302学习
由于硬件出了问题,也就是外部低速晶振没用,震不起来,然后查看了网上的帖子,STM32的RTC果然口碑不怎么样,所以果断换DS1302,在移植的过程中还算顺利,记录下来吧,也算对自己的总结吧! 1、所谓的DS1302 这里面也指明了简单的SPI协议 然后就直接上代码了,注释很详细的!基本实现单行注释 1、主函数main #include stm32f10x.h #include SysTick.h #include Delay.h #include Usart.h #include stdio.h #include DS1302.h /*******由于没有做外设测试的程序是:按键P
[单片机]
基于<font color='red'>stm32f103</font>zet6的DS1302学习
基于STM32F103单片机的矩阵按键设计
需要知识点 按键的原理 GPIO输入输出 寄存器 操作,如果学过51或者对 C语言 很熟练这里不存在问题。寄存器说白了就是操作他们的位(寄存器我理解就是一串羊肉串,让你找出你先吃哪个,比如我要吃中间的哪一个该怎么取出来) 矩阵按键原理 本实验使用 STM32 F103 单片机 ,主题代码通用的。 如果每个按键占用一个GPIO引脚,对于使用多个按键来说就是一种资源的浪费,因此当我们在设计时,可以考虑矩阵这种方式。本实验使用4*4也就是16个按键。 矩阵按键相对于独立按键稍微麻烦一点。4x4矩阵按键按照矩阵方式分别分为4行4列。主要有两种方式,一种是逐行扫描、一种是行列扫描。 原理图: 逐行扫描 通过在矩阵按键的每一条行线上
[单片机]
基于<font color='red'>STM32F103</font>单片机的矩阵按键设计
SystemInit()函数详解
1 基于STM32F103的SystemInit()函数详解 1 使用的固件库是,STM32F10x_StdPeriph_Lib_V3.5.0 2 学习板CPU的具体型号为STM32F103VET6 3 软件开发环境为RVMDK3.90 4 未定义STM32F10X_CL,在system_stm32f10x.c(第0115行)中定义了SYSCLK_FREQ_72MHz,具体如下: #if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL) /* #define SYSCLK_FREQ_HSE HSE
[单片机]
SystemInit()函数详解
stm32f103zet6与stm32f103rct6的区别
  1、STM32F系列属于中低端的32位ARM微控制器,该系列芯片是意法半导体(ST)公司出品,其内核是Cortex-M3。   其中STM32F系列有:   1)STM32F103“增强型”系列   2)STM32F101“基本型”系列   3)STM32F105、STM32F107“互联型”系列   增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是32位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,相当于0.5m
[单片机]
<font color='red'>stm32f103</font>zet6与<font color='red'>stm32f103</font>rct6的区别
stm32f103基本定时器,定时器中断服务程序里面输出脉冲波形
main.c /**定时器中断TIM3方式,(当基本定时器不用PWM输出) 设计两路输出两路脉冲波: 周期:100us,占空比80% 周期:100us,占空比20%**/ int main(void) { LED_Init();//pc14引脚初始化 BEEP_Init();/pc13引脚初始化 TIME_Init();//定时器初始化 while(1); } time.c #include stm32f10x.h #include time.h #include delay.h #include beep.h #include stdio.h void TIME_Init(void) {
[单片机]
<font color='red'>stm32f103</font>基本定时器,定时器中断服务程序里面输出脉冲波形
STM32F103C8T6 实现舵机与电机的控制 2个定时器输出不同频率的PWM
智能小家居------舵机开门,电机做风扇 or 拉窗帘、呼吸灯做提示,小OLED屏幕显示当前状态。 直接上代码 背景:我觉得我看了那么多教程了,然而只会玩单个东西,串起来就不太懂。 本项目的代码部分实现用到了2个时钟,TIM2 和 TIM3。 经历的问题:原本我是想只用一个时钟,不同通道来实现PWM的输出,但是我发现 我如果把TIM_TimeBaseInitStructure.TIM_Period = ARR ; //ARR 自动重装器的值 ARR = 20000 -1 时,只能驱动舵机,不能驱动电机。 ARR = 100 -1 时,只能驱动电机,不能驱动舵机。 后来发现: SG90舵机接收的PWM信号频率为50HZ,T=
[单片机]
<font color='red'>STM32F103</font>C8T6 实现舵机与电机的控制 2个定时器输出不同频率的PWM
基于STM32F103R8T6的数字量度继电器设计
0  引言   在电力及工业自动化控制系统中,常用各种类型的继电器应用于需要进行状态监控的场合,作为保护的闭锁动作元件或启动元件。目前,大部分用于此类场合的继电器都为静态继电器,完全采用模拟电路设计,参数设置、整定值设定都采用旋钮调节,采用此方式设置精度低、误差大、保护功能单一,不带有显示装置,用户无法从继电器上得知当前各种电参量,且无法组网实现智能化网络化。   另有一类为多功能综合性保护型继电器,如南京因泰莱的PA100系列综合数字继电器、ABB的615系列继电器,此类型继电器名称上为继电器,其实为多功能继电保护装置,此类型的继电器功能强大,集保护、测量、控制、监测、通讯等多种功能于一体,是高端的电力系统自动化
[电源管理]
基于<font color='red'>STM32F103</font>R8T6的数字量度继电器设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved