stm32的stm32固件库下载和pc端软件的区别

使用STM32 硬件CRC 和在PC端用软件校验CRC - 单片机干货 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
使用STM32 硬件CRC 和在PC端用软件校验CRC
11:24:07  
关于 STM32 CRC 的使用,网上有很多的文章,也对CRC算法进行深入探讨过,在这里只是简单介绍如果使用STM32 硬件CRC 和在PC端用软件校验CRC1, STM32 硬件 CRC
1.1, 先打开CRC硬件时钟:
/* Enable CRC clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE);复制代码
1.2, 每次使用前需复位 CRC 模块:
/* Reset CRC generator */
CRC-&CR = CRC_CR_RESET;复制代码
1.3, 计算CRC 值:
printf(“CRC_value = %08X\r\n”, CRC_CalcCRC(0x5A5AA5A5));
或直接写入寄存器: CRC-&DR = 0x5A5AA5A5 ;
然后读出结果: CRC_value = CRC-&DR ;
1.4, 注意问题:
CRC-&DR 是个 32 位寄存器,如果写入数据不够32位,要自行补足,怎么补,补什么都可以,但关键是要跟PC机一致即可。
一般是补 1,如: CRC-&DR = 0x5AFFFFFF ;
如果不补足32位,计算出来的结果,跟PC端的结果会有差异,这点要千万小心!
参考 MCD Application V3.5.0, CRC_Calculation CRC Calculation example:
\stm32f10x_stdperiph_lib\STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples\CRC\CRC_Calculation
2, PC端对应算法:
这是简化过的,使用查表法,crc32, 完整版本请参考:
同理,输入数据一定要补足32位,不足时,跟STM32 算出来的结果不一致。
// CRC parameters (default values are for CRC-32):
const int order = 32;
const unsigned long polynom = 0x4c11db7;
// ‘order’ [1..32] is the CRC polynom order, counted without the leading ’1′ bit
// ‘polynom’ is the CRC polynom without leading ’1′ bit
static const unsigned int crctab[ 256 ] =
0×x04C11DB7, 0x09823B6E, 0x0Dx130476DC, 0x17C56B6B, 0x1A864DB2, 0x1E475005,
0x2608EDB8, 0x22C9F00F, 0x2F8AD6D6, 0x2B4BCB61, 0x350C9B64, 0x31CD86D3, 0x3C8EA00A, 0x384FBDBD,
0x4C11DB70, 0x48D0C6C7, 0x4593E01E, 0x4152FDA9, 0x5F15ADAC, 0x5BD4B01B, 0x, 0x52568B75,
0x6Ax6ED82B7F, 0x639B0DA6, 0x675ADDDC5DA3, 0x709F7B7A, 0x745E66CD,
0x, 0x9CE2AB57, 0x91A18D8E, 0×x8B27C03C, 0x8FE6DD8B, 0x82A5FB52, 0x,
0xBE2B5B58, 0xBAEA46EF, 0xB7A987D81, 0xAD2F2D84, 0xA9EEAD16EA, 0xA06C0B5D,
0xDxD0F37027, 0xDDB056FE, 0xDxC7361B4C, 0xC3F706FB, 0xCEB42022, 0xCA753D95,
0xF23AFB9D9F, 0xFBB8BB46, 0xFF79A6F1, 0xE13EF6F4, 0xE5FFEB43, 0xE8BCCD9A, 0xEC7DD02D,
0×x3x3D044B19, 0x39C556AE, 0x278206AB, 0x23431B1C, 0x2E003DC5, 0x2AC12072,
0x128E9DCF, 0x164FB0CA6A1, 0x1FCDBB16, 0x018AEB13, 0x054BF6A4, 0x0808D07D, 0x0CC9CDCA,
0xx7C56B6B0, 0×x75D48DDE, 0x6B93DDDB, 0x6F52C06C, 0x, 0x66D0FB02,
0x5E9F46BF, 0x5A5E5B08, 0x571D7DD1, 0x53DCD9BA2DD4, 0x44190B0D, 0x40D816BA,
0xACA5C697, 0xA864DB20, 0xA527FDF9, 0xA1E6E04E, 0xBFA1B04B, 0xBB60ADFC, 0xBxB2E29692,
0x8AAD2B2F, 0x8E6CFEE0DF6, 0x99A95DF3, 0x9Dx902B669D, 0x94EA7B2A,
0xE0B41DE7, 0xExExEDF73B3E, 0xF3B06B3B, 0xF771768C, 0xFAxFEF34DE2,
0xC6BCF05F, 0xC27DEDE8, 0xCF3ECB31, 0xCBFFD686, 0xD5B899B34, 0xDC3ABDED, 0xD8FBA05A,
0x690CE0EE, 0x6DCDFD59, 0x608EDB80, 0x644FC637, 0x7Ax7EC98B85, 0x738AAD5C, 0x774BB0EB,
0x4F040D56, 0x4BC510E1, 0×x42472B8F, 0x5C007B8A, 0x58C1663D, 0x, 0x51435D53,
0x251D3B9E, 0x21DCC9F00F0, 0x285E1D47, 0xx32D850F5, 0x3F9B762C, 0x3B5A6B9B,
0xx07D4CB91, 0x0A97ED48, 0x0E56F0FF, 0x1011A0FA, 0x14D0BD4D, 0xx1D528623,
0xF12F560E, 0xF5EE4BB9, 0xF8AD6D60, 0xFC6C70D7, 0xE22B20D2, 0xE6EA3D65, 0xEBA91BBC, 0xEF68060B,
0xD727BBB6, 0xD3E6A601, 0xDEA580D8, 0xDA649D6F, 0xC423CD6A, 0xC0E2D0DD, 0xCDA1F604, 0xC960EBB3,
0xBD3E8D7E, 0xB9FF90C9, 0xB4BCB610, 0xB07DABA7, 0xAE3AFBA2, 0xAAFBE615, 0xA7B8C0CC, 0xA379DD7B,
0x9Bx9FF77D71, 0x92B45BA8, 0x9675461F, 0x8832161A, 0x8CF30BAD, 0x81B02D74, 0x,
0x5D8AB8D2E, 0x5408ABF7, 0x50C9B640, 0x4E8EE645, 0x4A4FFBF2, 0x470CDD2B, 0x43CDC09C,
0x7B827D21, 0x7Fx7200464F, 0x76C15BF8, 0x68860BFD, 0x6C47164A, 0×x65C52D24,
0x119B4BE9, 0x155A565E, 0×x1CD86D30, 0x029F3D35, 0x065EB1D065B, 0x0FDC1BEC,
0xx3352BBE6, 0x3E119D3F, 0x3AD07D08D, 0x2056CD3A, 0x2D15EBE3, 0x29D4F654,
0xC5A983BCE, 0xCC2B1D17, 0xC8EA00A0, 0xD6AD50A5, 0xD26C4D12, 0xDF2F6BCB, 0xDBEE767C,
0xE3A1CBC1, 0xE760D676, 0xEA23F0AF, 0xEEE2ED18, 0xF0A5BD1D, 0xF464A0AA, 0xFxFDE69BC4,
0x89B8FD09, 0x8D79E0BE, 0x803AC667, 0x84FBDBD0, 0x9ABC8BD5, 0x9E7DEB0BB, 0x97FFAD0C,
0xAFB010B1, 0xAB710D06, 0xA6322BDF, 0xA2F33668, 0xBCB4666D, 0xB8757BDA, 0xBxB1F740B4
};
&p&unsigned int crctablefast (unsigned char* p, unsigned long len) {
&p&// fast lookup table algorithm without augmented zero bytes, e.g. used in pkzip.
// only usable with polynom orders of 8, 16, 24 or 32.
&p&unsigned long crc = 0xFFFFFFFF;&/p&
&p&while (len–) {
crc = (crc && 8) ^ crctab[ ((crc && (order-8)) & 0xff) ^ *p++];
}
crc^= 0×;
crc&= 0xFFFFFFFF;
return(crc);
& && && && && && && && &
您的帖子很精彩,期待您分享的下一个帖子!.
助理工程师
21:30:19  
什么意思,木有明白啊??
14:37:35  
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
10:50:27  
混乱中~~小白正在学习中
23:39:16  
谢谢分享谢谢分享谢谢分享
高级工程师
14:45:17  
顶个。。。。。。。。。。。。。。
等待验证会员
16:04:14  
您的帖子很精彩,期待您分享的下一个帖子
15:53:47  
顶个。。。。。。。。。。。。。。
高级工程师
00:17:22  
谢谢分享,谢谢分享!!!
17:16:15  
感觉好难的样子,不懂CRC
高级工程师
23:16:09  
谢谢分享&&谢谢分享
10:09:56  
好东西,在顶一下支持!!!
11:09:35  
感谢分享。。。。
Powered by
供应链服务
商务及广告合作
Jeffery Guo
关注我们的微信
供应链服务 PCB/IC/PCBA
下载发烧友APP
版权所有 (C) 深圳华强聚丰电子科技有限公司查看: 13449|回复: 32
ST-Link 终于有了支持STM32Fxx系列编程的PC端软件了!
回家了,上网太不方便了,今天找了一个地方蹭网来着,顺道去了一下STMCU的主站。发现ST toolset多了一个 pack 20
& & 一看解释,是说更新到STVP 3.2.0 并且支持STM32。STVP是ST官方的ST MCU编程软件,支持STM32了,RLink还是STLink?现下来看看吧。
因为pack 20是基于ST toolset v4.1.4的补丁,因此安装的时候需要已安装好ST toolset v4.1.4。
ST toolset v4.1.4
/stonline/products/support/micro/files/sttoolset.exe
ST toolset pack 20:
/stonline/products/support/micro/files/sttoolset_pack20_patch1.exe
& &安装完成后,打开STVP,显示已经是3.2.0了。
(原文件名:2.png)
& &打开Configure -& Configure ST Visual Programmer。RLink没有变化,但选择STLink后,我们可以看到,编程模式下面增加了JTAG和SWD两个选项,当选择JTAG后,我们发现现已Release 的STM32F全系列都一直其中,包括STM32F100系列。
& &在家休假没带什么工具回来,找到一个ST Link和唯一的一块板STM3210C-EVAL。连上,选择JTAG接口、107xC。
&&“读”操作,速度挺快。把读出的内容回写到107VC,按照标准的编程操作序列配置,大概花了28秒钟。看来还行,不比Rlink差。
& &再试试SWD,选择SWD接口、107xC。
& &哦,晕倒,提示当前版本不支持SWD。
& &手中的这个STLink是ST单独销售的带外壳的ST Link版本,在Sttoolset安装路径找不到提示说的ST-LinkUpgrade.exe,看来要等年后上班回去问问了。
& &有旧版三合一的也可以试试上面的STLink。
& &STVP软件用起来挺方便的,特别是Optionbytes,一目了然,不像JFlash、和RFlaash这个功能用起来不顺。
& &有了这个软件,那些只有STLink的网友,就不需用IDE的Debug功能来下载代码了。
不知道3合1的板子上stlink是否支持SWD,只能等上班了再测试了。
现在的板子太小了,几乎无法忍受JTAG的面积。
3合1的板子上stlink我手上的版本不支持SWD,同Grant说的一样,提示要升级.
另外MDK4.03中STLINK也加了SWD选项,也是不能使用,提示驱动不对.
杯具了。过完年再去买几个山寨JLINK吧。
手上只有 J-LINK怎么烧写呢 用IAR好像不可以写保护设置
还有带SWD的STLINK出来了没呢
下了,结果怎么用不了呀?
提示cannot communicate with the tool
我用的是399万利的板子,刚接触,麻烦指点下,谢谢
不行呀,STLINKII支持吗??我试了,出错了
继续期待ST-LinkUpgrade.exe。
使用ST-LinkUpgrade.exe软件确实可以更新固件,升级后,使用MDK4.10 + Keil的3210E试过SWD调试,没有问题。
运行STVP,使用SWD接口烧写STM32F103ZET6,没问题,也许是512K的原因吧,就是整体编程的速度有些慢,具体时间没测。
带外壳的STLink是可以升级的
三合一小板上的STLink是可以升级的
其它的STLinkxxx我没有,没试过。
ST-LinkUpgrade.exe上哪找?
9楼能否将ST-LinkUpgrade.exe上传至本坛供大伙下载呢?
回复【5楼】starowen
-----------------------------------------------------------------------
程序中不是可以直接写保护+读保护
我也没找到ST-LinkUpgrade.exe这个文件啊?
是否可以给个ST-LinkUpgrade.exe文件给我??
是否可以给个ST-LinkUpgrade.exe文件给我??
准备用STM32,更加增强了信心
同求ST-LinkUpgrade.exe,这个软件方便大家大家用SWD调试STM32的,方便STM32出货,应该不存在什么问题吧?
不明白为何不把ST-LinkUpgrade.exe公开出来?
难道ST或Grant兄有难言之隐?
ST的ST-LINK用户手册上不是说在其网站上提供ST-LinkUpgrade.exe下载吗?为何到现在都不提供?无语。
是否可以给个ST-LinkUpgrade.exe文件给我??
ST网站已可一下ST-LinkUpgrade.exe.不用传啦.
/bbs/bbs_content.jsp?bbs_sn=3943087&bbs_page_no=1&bbs_id=9999
官方地址:
//stonline/products/support/micro/files/stlinkupgrade.zip
多谢楼上淫兄,已经能用
三合一小板上的STLink如何升级?
运行 ST-LinkUpgrade.exe 就可以么?
我还没试。谢了!
下个来试试
谢谢上面发路径的兄弟
为规范版面同时也方便大家查找资料,帖子内容已移至置顶贴
[原创]ST MCU MiniKit(三合一开发板)使用参考
【25楼】 chaijb8008
升级的时候,先插上STLink,然后运行升级程序,升级程序会告知你但前的固件版本号,单击升级按钮即可,升级完成后会告知升级后的固件版本号。
阿莫电子论坛, 原"中国电子开发网"查看: 7227|回复: 7
请教 关于 stm32 快速io与 普通 io位操作的 区别
主题帖子精华
高级会员, 积分 829, 距离下一级还需 171 积分
在线时间62 小时
&&&&&&& & 请教一下&stm32 快速io与 普通 io位操作的 区别&
&&&&& &&&如果通过 BSRR/BRR 快速改变IO口的输出 而且速度还比较快 那么为什么要用 ODR 来输出呢
主题帖子精华
金钱115359
在线时间868 小时
回复【楼主位】simms01:
---------------------------------
因为ODR的某个位即可设置输出也可以清除输出.
BSRR/BRR能吗?
用了你就知道.
如非特殊要求,没必要用BSRR和BRR,因为用着不爽.
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
中级会员, 积分 218, 距离下一级还需 282 积分
在线时间0 小时
我喜欢用:BSRR/BRR
它们只有“1”才会改变值,不用担心影响其他位。
BSRR的高位也可以用来清除。
反正用好了会方便的,但也不需要刻意用,哪个方便哪个来!
原子在这个问题上偏激了。。
世界上有10种人,一种是懂二进制的,另一种是不懂二进制的。。。
主题帖子精华
金钱115359
在线时间868 小时
萝卜白菜,各有所爱吧.
喜欢哪个就用哪个吧.能达到效果就好.
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
新手上路, 积分 21, 距离下一级还需 29 积分
在线时间0 小时
回复【2楼】正点原子:
---------------------------------
快速IO和普通IO在固件库函数中的区别是不是GPIO_Speed上的设置?
主题帖子精华
金钱115359
在线时间868 小时
库函数没研究...
不过不是speed吧,speed是不是设置2M,10M,50M之类的那个?
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 63, 距离下一级还需 137 积分
在线时间5 小时
回复【6楼】正点原子:
先看你的程序:
////////////////////////////////////////////////////////////////////
//-----------------LCD端口定义----------------&
#define LCD_LED&nbspCout(10)&//LCD背光&&&& &&nbspC10&
//如果使用快速IO,则定义下句,如果不使用,则去掉即可!
//使用快速IO,刷屏速率可以达到28帧每秒!
//普通IO,只能14帧每秒!&&&
#if&LCD_FAST_IO==1&//快速IO
//操作频繁,为了提高速度,建议直接寄存器操作
#define LCD_CS_SET&&GPIOC-&BSRR=1&&9&&&&//片选端口&& &&&&&nbspC9
#define LCD_RS_SET GPIOC-&BSRR=1&&8&&&&//数据/命令&&&&&&&&&&nbspC8 &&&
#define LCD_WR_SET GPIOC-&BSRR=1&&7&&&&//写数据 &&nbspC7
#define LCD_RD_SET GPIOC-&BSRR=1&&6&&&&//读数据 &&nbspC6
&&&&
#define LCD_CS_CLR&&GPIOC-&BRR=1&&9&&&&&//片选端口&& &&&&&nbspC9
#define LCD_RS_CLR GPIOC-&BRR=1&&8&&&&&//数据/命令&&&&&&&&&&nbspC8 &&&
#define LCD_WR_CLR GPIOC-&BRR=1&&7&&&&&//写数据 &&nbspC7
#define LCD_RD_CLR GPIOC-&BRR=1&&6&&&&&//读数据 &&nbspC6
/*
#define LCD_CS_SET&&GPIO_SetBits(GPIOC,GPIO_Pin_9)&&&&//片选端口&& &&&&&PC9
#define LCD_RS_SET GPIO_SetBits(GPIOC,GPIO_Pin_8)&&&&//数据/命令&&&&&&&&PC8 &&&
#define LCD_WR_SET GPIO_SetBits(GPIOC,GPIO_Pin_7)&&&&//写数据 &&PC7
#define LCD_RD_SET GPIO_SetBits(GPIOC,GPIO_Pin_6)&&&&//读数据 &&PC6
&&&&
#define LCD_CS_CLR&&GPIO_ResetBits(GPIOC,GPIO_Pin_9)&&&&&//片选端口&& &&&&&PC9
#define LCD_RS_CLR GPIO_ResetBits(GPIOC,GPIO_Pin_8)&&&&&//数据/命令&&&&&&&&&PC8 &&&
#define LCD_WR_CLR GPIO_ResetBits(GPIOC,GPIO_Pin_7)&&&&&//写数据 &&PC7
#define LCD_RD_CLR GPIO_ResetBits(GPIOC,GPIO_Pin_6)&&&&&//读数据 &&PC6
*/
&&&&
#else&//慢速IO
#define LCD_CS PCout(9)&&//片选端口&& &&&&&PC9
#define LCD_RS PCout(8)&&//数据/命令&&&&&&&&PC8 &&&
#define LCD_WR PCout(7)&&//写数据 &&PC7
#define LCD_RD PCout(6)&&//读数据 &&PC6
#endif
&//#define&PCout(n)&&&BIT_ADDR(GPIOC_ODR_Addr,n)&&//输出&
//#define&PCin(n)&&&&BIT_ADDR(GPIOC_IDR_Addr,n)&&//输入&
1.都是宏定义,何来快慢之说?
2.你说不用BSRR/BRR&,但是你程序里却用(快速),自相矛盾?
3.有没有验证过?
&&请刘老师解释一下,非常感谢!
主题帖子精华
初级会员, 积分 63, 距离下一级还需 137 积分
在线时间5 小时
回复【7楼】casy:
---------------------------------
//IO
口地址映射
#define&GPIOA_ODR_Addr&(GPIOA_BASE+12)&//0x4001080C&
#define&GPIOB_ODR_Addr&(GPIOB_BASE+12)&//0x40010C0C&
#define&GPIOC_ODR_Addr&(GPIOC_BASE+12)&//0x4001100C&
#define&GPIOD_ODR_Addr&(GPIOD_BASE+12)&//0x4001140C&
#define&GPIOE_ODR_Addr&(GPIOE_BASE+12)&//0x4001180C&
#define&GPIOF_ODR_Addr&(GPIOF_BASE+12)&//0x40011A0C&
#define&GPIOG_ODR_Addr&(GPIOG_BASE+12)&//0x40011E0C&
#define&GPIOA_IDR_Addr&(GPIOA_BASE+8)&//0x&
#define&GPIOB_IDR_Addr&(GPIOB_BASE+8)&//0x40010C08&
#define&GPIOC_IDR_Addr&(GPIOC_BASE+8)&//0x&
#define&GPIOD_IDR_Addr&(GPIOD_BASE+8)&//0x&
#define&GPIOE_IDR_Addr&(GPIOE_BASE+8)&//0x&
#define&GPIOF_IDR_Addr&(GPIOF_BASE+8)&//0x40011A08&
原来楼主问问题的时候说反了,原子的程序完全正确!
以上代码的实现得益于CM3的位带操作,具体的实现比较复杂,
请参考&&CM3权威指南&&第五章
Powered bySTM32-MAT/TARGET-3. PC端软件-意法半导体STM32/STM8技术社区
STM32-MAT/TARGET
使用抖动技术提高STM32高级定时器、通用定时器和基本定时器的PWM精度
(STM32 embedded target for MATLAB and Simulink (RN0087))
Tel: 3-8064
备案号: 苏ICP备号-2}

我要回帖

更多关于 stm32f0固件库下载 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信