stm32程序不运行运行两个工程,互不干扰,这个要怎么做

2015年3月 Linux/Unix社区大版内专家分月排行榜第二2014年12月 Linux/Unix社区大版内专家分月排行榜第二2014年11月 Linux/Unix社区大版内专家分月排行榜第二2014年9月 Linux/Unix社区大版内专家分月排行榜第二2014年8月 Linux/Unix社区大版内专家分月排行榜第二2014年7月 Linux/Unix社区大版内专家分月排行榜第二2014年5月 Linux/Unix社区大版内专家分月排行榜第二2014年4月 Linux/Unix社区大版内专家分月排行榜第二
2014年3月 Linux/Unix社区大版内专家分月排行榜第三
2014年7月 硬件/嵌入开发大版内专家分月排行榜第二
2013年10月 硬件/嵌入开发大版内专家分月排行榜第三2013年6月 硬件/嵌入开发大版内专家分月排行榜第三2013年3月 硬件/嵌入开发大版内专家分月排行榜第三
2014年7月 硬件/嵌入开发大版内专家分月排行榜第二
2013年10月 硬件/嵌入开发大版内专家分月排行榜第三2013年6月 硬件/嵌入开发大版内专家分月排行榜第三2013年3月 硬件/嵌入开发大版内专家分月排行榜第三
2015年3月 Linux/Unix社区大版内专家分月排行榜第二2014年12月 Linux/Unix社区大版内专家分月排行榜第二2014年11月 Linux/Unix社区大版内专家分月排行榜第二2014年9月 Linux/Unix社区大版内专家分月排行榜第二2014年8月 Linux/Unix社区大版内专家分月排行榜第二2014年7月 Linux/Unix社区大版内专家分月排行榜第二2014年5月 Linux/Unix社区大版内专家分月排行榜第二2014年4月 Linux/Unix社区大版内专家分月排行榜第二
2014年3月 Linux/Unix社区大版内专家分月排行榜第三
2013年1月 硬件/嵌入开发大版内专家分月排行榜第一2012年10月 硬件/嵌入开发大版内专家分月排行榜第一2012年9月 硬件/嵌入开发大版内专家分月排行榜第一2012年8月 硬件/嵌入开发大版内专家分月排行榜第一2012年7月 硬件/嵌入开发大版内专家分月排行榜第一2012年6月 硬件/嵌入开发大版内专家分月排行榜第一2012年5月 硬件/嵌入开发大版内专家分月排行榜第一2012年4月 硬件/嵌入开发大版内专家分月排行榜第一2012年3月 硬件/嵌入开发大版内专家分月排行榜第一2012年2月 硬件/嵌入开发大版内专家分月排行榜第一2012年1月 硬件/嵌入开发大版内专家分月排行榜第一2011年11月 硬件/嵌入开发大版内专家分月排行榜第一2011年10月 硬件/嵌入开发大版内专家分月排行榜第一2011年9月 硬件/嵌入开发大版内专家分月排行榜第一
2014年10月 硬件/嵌入开发大版内专家分月排行榜第二2014年2月 硬件/嵌入开发大版内专家分月排行榜第二2013年10月 硬件/嵌入开发大版内专家分月排行榜第二2013年8月 硬件/嵌入开发大版内专家分月排行榜第二2013年3月 硬件/嵌入开发大版内专家分月排行榜第二2012年12月 硬件/嵌入开发大版内专家分月排行榜第二2012年11月 硬件/嵌入开发大版内专家分月排行榜第二2011年12月 硬件/嵌入开发大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。2732人阅读
&&&& 其实我早就应该写这篇博客了,在刚学会创建STM32工程的时候就应该写,但我是如此懒惰的一个人还有就是缺少好的学习习惯,但是看32没多长时间就去学画板子了,所以拖到现在才总结一下,今日事今日毕,以后一定好好照着做。
&&&& STM32是一款非常优秀的芯片,功能强大的32位处理器,当然入门也是有难度的,所以广大初学者都要经历从8位机跨度到32位机的痛苦过程,在学长的帮助下我花了两天的时间才学会了创建STM32的工程。到底如何创建一个好使的工程呢?
1、首先 在桌面(或你喜欢的地方)创建一个文件夹并以你工程的名字命名(如LED),在该文件下建立分别建立以CMSIS/LISTING/OUTPUT/FWLIB/STARTUP/USER命名的六个文件夹。
2,把你的固件库次目录STM32F10x_stdperiph_lib_v3.5.0\Libraries\STM32F10x_Stdperiph_Driver的inc和src这两个文件夹拷到我们新建的FWlib文件夹中STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Template下的 main.c、stm32f10x_conf.h、stm32f10x_it.h、 stm32f10x_it.c拷到我们建的USER文件夹中(stm32f10x_it.h、和stm32f10x_it.c这两个文件里面是中断函数,里面为空,并没有写任何的中断服务程序。stm32f10x_conf.h是用户需要配置的头文件,当我们需要用到芯片中的某部分外设的驱动时,我们只需要在该文件下将该驱动的头文件包含进来即可,片上外设的驱动在src文件夹中,inc文件夹里面是它们的头文件。这三个文件是用户在编程时需要修改的文件,其他库文件一般不需要修改。)把STM32F10x_Stdperiph_lib_V3.5\libraries\CMSIS\CM3\Coresupport下的core_cm3.c和core_cm3.h以及STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x的stm32f10x.h、system_stm32f10x.c、system_stm32f10x.h(system_stm32f10x.c是ARM公司提供的符合CMSIS标准的库文件)拷到CMSIS中,把STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM\DeviceSupport\ST\STM32F10x\startup\arm的全部文件拷贝拷到我们新建的STARTUP这个文件夹中,这些是用汇编写的启动文件。我的板子用的CPU是STM32F103VET6,有512K
Flash,属于大容量的,所以等下我们把startup_stm32f10x_hd.s添加到我们的工程中。根据ST的官方资料:Flash在16 ~32 Kbytes为小容量, 64 ~128 Kbytes 为中容量,256 ~512 Kbytes为大容量,不同大小的Flash对应的启动文件不一样,这点要注意。效果如下图
&&&&& 点击桌面UVision4图标,启动软件。如果是第一次使用的话会打开一个自带的工程文件,我们可以通过工具栏Project-&Close Project选项把它关掉。
 在工具栏Project-&New μVision Project…新建我们的工程文件,我们将新建的工程文件保存在桌面的DEMO\USER文件夹下 点&击保存。
&&&&&&&&&&
接下来的窗口是让我们选择公司跟芯片的型号,我们用的芯片是ST公司的STM32F103VET6,有64K SRAM,512K Flash,属于高集成度的芯片。按如下选择即可。
&&&&&&& 接下来的窗口问我们是否需要拷贝STM32的启动代码到工程文件中,这份启动代码在M3系列中都是适用的,一般情况下我们都点击是,但我们这里用的是ST的库,库文件里面也自带了这一份启动代码,所以为了保持库的完整性,我们就不需要开发环境为我们自带的启动代码了,稍后我们自己手动添加,这里我们点击否。
&&&&& 此时我们的工程新建成功,马上把Target改名字为LED,我们的工程虽然新建成功,但我们的工程中还没有任何文件,接下来我们把LED下的文件夹改名为STARTUP,再新建以FWLIB ,CMSIS,USER,命名的文件夹。
&&&&& 在LED上右键选中Add Group…选项,新建四个组,分别命名为STARTCODE、USER、FWlib、CMSIS。STARTCODE从名字就可以看得出我们是用它来放我们的启动代码的,USER用来存放用户自定义的应用程序,FWlib用来存放库文件,CMSIS用来存放M3系列单片机通用的文件。
 接下来我们往我们这些新建的组中添加文件,双击哪个组就可以往哪个组里面添加文件。我们在STARTCOKE里面添加startup_stm32f10x_hd.s,在USER组里面添加main.c 和 stm32f10x_it.c 这两个文件,在FWlib组里面添加src里面的全部驱动文件,当然,src里面的驱动文件也可以需要哪个就添加哪个。这里将它们全部添加进去是为了后续开发的方便,况且我们可以通过配置stm32f10x_conf.h 这个头文件来选择性添加,只有在stm32f10x_conf.h文件中配置的文件才会被编译。在CMSIS里面添加core_cm3.c
和system_stm32f10x.c文件。注意,这些组里面添加的都是汇编文件跟C文件,头文件是不需要添加的。最终效果如下图:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:199757次
积分:2759
积分:2759
排名:第10053名
原创:105篇
转载:27篇
评论:24条
(7)(1)(1)(3)(10)(3)(2)(11)(7)(3)(7)(6)(13)(11)(9)(9)(5)(19)(5)带你走进STM32(一)_stm32吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:20,962贴子:
带你走进STM32(一)收藏
STM32 注意的地方注:AHB主要负责外部存储器时钟。PB2负责AD,I/O,高级TIM,串口1。APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM。使用MDK KeiluVision4进行学习,照着前面几个历程进行学习,看懂几个历程后想自己也照着搞搞,开始有些错误经调试后都解决了,但是在其他问题都解决后,编译就出现了More More than one section matches selector - cannot all be FIRST/LAST这个错误,还提示啥包涵了一个错误的路径,本人各种检查路径,和历程的都一样了,可这个问题还没解决,当然后来发现这个不是路径的问题,上网找了好久,终于发现了,在历程中RVMDK以及STM32_EVAL中的几个初始汇编文件前有三个红点,而自己的工程中没有,再找资料才发现了如何设置,在此分享下,希望对大家有帮助:对需要设置的文件(就是文件上有三个红点的文件,几个历程基本都一样),点右键Options for File'***',勾去灰化的Include in Target Build和Always Build,然后才重新编译,就能顺利通过了。类型说明------100脚S - 电源I - 输入O - 输出I/O - 输入输出FT - 5V 兼容VDD - 单片机3.3V 电源正VSS - 单片机3.3V 电源负VDDA - 单片机A/D 转换器电源正VSSA - 单片机A/D 转换器电源负VREF+ - 单片机A/D 转换器参考电压正VREF- - 单片机A/D 转换器参考电压负由于STM32F103 系列单片机的内部高速RC 振荡器(HSI)由VDDA、VSSA 供电,故即使不使用单片机自带的A/D 转换器,也必须保证VDDA、VSSA 的供电,否则STM32F103单片机不能正常启动。在EC30-EKSTM32 核心板的背面,VDDA 和VSSA 分别通过电感连接到VDD 和VSS。如果外部有VDDA、VSSA 的处理电路,需要将背面这两个电感拆除。STM32F103 有两个独立的12 位A/D 转换器,16 个A/D 转换通道。EC30-EKSTM32 只使用第1 个A/D 转换器ADC1。16 个A/D 转换通道分布在PA0 ~ PA7、PB0、PB1、PC0 ~ PC5这16 个管脚上,其中任何一个管脚都可以配置为模拟量输入管脚AIWx。 设置NVIC优先级分组,方式。注:一共16个优先级,分为抢占式和响应式。两种优先级所占的数量由此代码确定,NVIC_PriorityGroup_x可以是0、1、2、3、4,分别代表抢占优先级有1、2、4、8、16个和响应优先级有16、8、4、2、1个。规定两种优先级的数量后,所有的中断级别必须在其中选择,抢占级别高的会打断其他中断优先执行,而响应级别高的会在其他中断执行完优先执行。 STM32中有些硬件功能可以由用户自己配置,选择字节用于这些配置。这些通过用户选择字节配置的功能不能简单地通过软件配置,相应的功能必须在芯片上电时存在。如内部的独立看门狗,可以通过用户选择字节配置为做看门狗用,也可以通过用户选择字节配置为做普通计数器用;做看门狗使用时,软件是无法停止它的,所以芯片上电时这个功能就必须有效。STM32三种启动模式中存储器的存储介质 STM32三种启动模式对应的存储介质均是芯片内置的,它们是:1)用户闪存 = 芯片内置的Flash。2)SRAM = 芯片内置的RAM区,就是内存啦。3)系统存储器 = 芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。在每个STM32的芯片上都有两个管脚BOOT0和BOOT1,这两个管脚在芯片复位时的电平状态决定了芯片复位后从哪个区域开始执行程序,见下表:BOOT1=x
从用户闪存启动,这是正常的工作模BOOT1=0
从系统存储器启动,这种模式启动的程序功能由厂家设置。BOOT1=1
从内置SRAM启动,这种模式可以用于调试。STM32 GPIO端口的输出速度设置当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:2MHz、10MHz和50MHz,这个速度是指I/O口驱动电路的速度,是用来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当你不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果你要输出较高频率的信号,但却选用了较低频率的驱动模块,你很可能会得到失真的输出信号。实际上芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路。注意:GPIO的引脚速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与你的程序有关。 关键是,GPIO的引脚速度跟应用匹配。比如对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。深圳广州郑州长沙南宁STM32学习详情联系郭老师q,可添加免费预约体验哦
寻找高性能半导体,请选择瑞萨.业界领先技术,超低耗电,强大性能,实现高利润
STM32F10xx时钟系统框图:时钟是整个系统的脉搏下图是STM32F10xx时钟系统的框图,通过这个图可以一目了然地看到各个部件时钟产生的路径,还可以很方便地计算出各部分的时钟频率。STM32的四个时钟源(HSI、HSE、LSI和LSE)也在图中标出;图中间的时钟监视系统(CSS)是在很多ST7的单片机中就出现的安全设置。特别注意:图的右边,输出定时器时钟之前有一个乘法器,它的操作不是由程序控制的,是由硬件根据前一级的APB预分频器的输出自动选择,当APB预分频器的分频因子为1时,这个乘法器无作用;当APB预分频器的分频因子大于1时,这个乘法器做倍频操作,即将APB预分频器输出的频率乘2,这样可以保证定时器可以得到最高的72MHz时钟脉冲。STM32上很多管脚功能可以重新映射STM32上有很多I/O口,也有很多的内置外设,为了节省引出管脚,这些内置外设都是与I/O口共用引出管脚,ST称其为I/O管脚的复用功能,相信这点大家都很清楚,因为基本上所有单片机都是这么做的。但不知有多少人知道,很多复用功能的引出脚可以通过重映射,从不同的I/O管脚引出,即复用功能的引出脚位是可通过程序改变的。这一功能的直接好处是,PCB电路板的设计人员可以在需要的情况下,不必把某些信号在板上绕一大圈完成联接,方便了PCB的设计同时潜在地减少了信号的交叉干扰。复用功能引出脚的重映射功能所带来的潜在好处是,在你不需要同时使用多个复用功能时,虚拟地增加复用功能的数量。例如,STM32上最多有3个USART接口,当你需要更多UART接口而又不需要同时使用它们时,可以通过这个重映射功能实现更多的UART接口。下述复用功能的引出脚具有重映射功能:
- 晶体振荡器的引脚在不接晶体时,可以作为普通I/O口
- JTAG调试接口
- 大部分定时器的引出接口
- 大部分USART的引出接口
- I2C1的引出接口
- SPI1的引出接口详细内容请看STM32的技术参考手册。请务必记住:如果使用了任意一种重映射功能,在初始化和使用之前,一定要打开AFIO时钟。下图示出了部分复用功能引出脚的重映射结果:【演示实例】一个在EK-STM32F板子上的RTC作为calender的例子硬件连接:串口线连至板子的UART-0端口。超级终端设置为:Bits Per seconds: 115200Data bits: 8Parity: noneStop bits: 1Flow control Hardware板子第一次跑这个程序时,进入时间配置。根据超级终端上的提示,一次输入年,月,日,时,分,秒(1月就输入01,10月直接输入10;同理3号就输入03)随后当前的时间就显示到了超级终端上,并且每秒刷新。没有断电的情况下再跑这个程序,由于看到bake up区域有被设置过时间的标志,不再进入时间设置阶段,而是直接到时间显示间断,在超级终端上,每秒刷新。当然如果在EK-STM32F板子上将Vbat和电池相接,具体就是:将红色的电源跳线帽中的从下往上数的第5个取下,从原来的水平放置改成竖直放置(和上面的VBAT相连)。就算断电,只要再上电,看到back up区域中的记号,一样直接进入时间显示。因为断电后,back up区域由电池供电,其中记录的记号不会由于系统掉电而消失。【演示实例】使用EK-STM32F板测量STM32的功耗这个例子演示了如何使用EK-STM32F开发评估板测量STM32F103VBT6在各种模式下的功耗。例子中演示了如何进入STM32的各种模式(RUN、SLEEP、STOP、STANDBY),使用这个例子您可以通过EK-STM32F板上的红色跳线(VDD、VREF+和VDDA)测量功耗。本实例首先通过UART与Windows的Hyperterminal通信,用户可以选择需要进入的功耗模式,然后这个例程把用户选好的配置存到后备寄存器,再次复位后STM32将进入之前选定的模式。附件包中包含了一个说明文件,详细说明了如何设置板上的跳线和操作的过程。STM32 GPIO的十大优越功能综述前几天Hotpower邀请大家讨论一下GPIO的功能、性能和优缺点(STM32的GPIO很强大~~~),等了几天没见太多人发言,但综合来看提到了3点:1)真双向IO,2)速度快,3)寄存器功能重复。关于第3点有说好,有说多余的,见仁见智。下面我就在做个抛砖引玉,根据ST手册上的内容,简单地综述一下GPIO的功能:一、共有8种模式,可以通过编程选择:
1. 浮空输入
2. 带上拉输入
3. 带下拉输入
4. 模拟输入
5. 开漏输出——(此模式可实现hotpower说的真双向IO)
6. 推挽输出
7. 复用功能的推挽输出
8. 复用功能的开漏输出模式7和模式8需根据具体的复用功能决定。二、专门的寄存器(GPIOx_BSRR和GPIOx_BRR)实现对GPIO口的原子操作,即回避了设置或清除I/O端口时的“读-修改-写”操作,使得设置或清除I/O端口的操作不会被中断处理打断而造成误动作。三、每个GPIO口都可以作为外部中断的输入,便于系统灵活设计。四、I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这有利于噪声控制。五、所有I/O口兼容CMOS和TTL,多数I/O口兼容5V电平。六、大电流驱动能力:GPIO口在高低电平分别为0.4V和VDD-0.4V时,可以提供或吸收8mA电流;如果把输入输出电平分别放宽到1.3V和VDD-1.3V时,可以提供或吸收20mA电流。七、具有独立的唤醒I/O口。八、很多I/O口的复用功能可以重新映射,见:你知道吗?STM32上很多管脚功能可以重新映射。九、GPIO口的配置具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。此功能非常有利于在程序跑飞的情况下保护系统中其他的设备,不会因为某些I/O口的配置被改变而损坏——如一个输入口变成输出口并输出电流。十、输出模式下输入寄存器依然有效,在开漏配置模式下实现真正的双向I/O功能。
STM32内置参照电压的使用每个STM32芯片都有一个内部的参照电压,相当于一个标准电压测量点,在芯片内部连接到ADC1的通道17。根据数据手册中的数据,这个参照电压的典型值是1.20V,最小值是1.16V,最大值是1.24V。这个电压基本不随外部供电电压的变化而变化。不少人把这个参照电压与ADC的参考电压混淆。ADC的参考电压都是通过Vref+提供的。100脚以上的型号,Vref+引到了片外,引脚名称为Vref+;64脚和小于64脚的型号,Vref+在芯片内部与VCC信号线相连,没有引到片外,这样AD的参考电压就是VCC上的电压。在ADC的外部参考电压波动,或因为Vref+在芯片内部与VCC相连而VCC变化的情况下,如果对于ADC测量的准确性要求不高时,可以使用这个内部参照电压得到ADC测量的电压值。具体方法是在测量某个通道的电压值之前,先读出参照电压的ADC测量数值,记为ADrefint;再读出要测量通道的ADC转换数值,记为ADchx;则要测量的电压为:Vchx = Vrefint * (ADchx/ADrefint)其中Vrefint为参照电压=1.20V。上述方法在使用内置温度传感器对因为温度变化,对系统参数进行补偿时就十分有效。STM32的ADC输入通道配置STM32中最多有3个ADC模块,每个模块对应的通道不完全重叠。下图是STM32F103CDE数据手册中的总框图的左下角,图中可以看出有8个外部ADC管脚分别接到了3个ADC模块,有8个外部ADC管脚只分别接到了2个ADC模块,还有5个外部ADC管脚只接到了ADC3模块,这样总共是21个通道。下表是这些ADC管脚与每个ADC模块的对应关系,表中可以看出ADC1还有2个内部通道,分别接到内部的温度传感器和内部的参照电压: 关于STM32 ADC速度的问题STM32F103xx系列称为增强型产品,增强型产品的最高时钟频率可以达到72MHz。增强型产品的英文名称为Performance Line。STM32F101xx系列称为基本型产品,基本型产品的最高时钟频率可以达到36MHz。基本型产品的英文名称为Access Line。根据设计,当ADC模块的频率为14MHz时,可以达到ADC的最快采样转换速度。要得到14MHz的ADC频率,就要求SYSCLK的频率是14MHz的倍数,即14MHz、28MHz、42MHz、56MHz、70MHz、84MHz等;对于基本型产品14MHz和28MHz处于它的最大允许频率范围内;对于增强型产品,14MHz、28MHz、42MHz、56MHz和70MHz几种频率都在它的最大允许频率范围内,但因为ADC预分频器的分频系数只有2、4、6、8这几个,使用70MHz不能得到最大的14MHz,所以要想得到最快的ADC转换速度,在增强型产品上能用的最快SYSCLK频率是56MHz。ADC的速度由2个参数决定,它是采样时间和转换时间之和:
即:TCONV = 采样时间 + 12.5个ADC时钟周期在STM32中,ADC的采样时间是由用户程序在一组预定的数值中选择,按照ADC的时钟周期计算,共有8种选择:
1.5、7.5、13.5、28.5、41.5、55.5、71.5和239.5按最小的1.5个时钟周期的采样时间计算,最短的TCONV等于14个时钟周期,如果ADC的时钟频率是14MHz,则ADC的速度为每秒100万次。注意:当ADC的时钟频率超过14MHz时,ADC的精度将会显著下降。STM32内置CRC模块的使用所有的STM32芯片都内置了一个硬件的CRC计算模块,可以很方便地应用到需要进行通信的程序中,这个CRC计算模块使用常见的、在以太网中使用的计算多项式:
X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2 + X + 1写成16进制就是:0x04C11DB7使用这个内置CRC模块的方法非常简单,既首先复位CRC模块(设置CRC_CR=0x01),这个操作把CRC计算的余数初始化为0xFFFFFFFF;然后把要计算的数据按每32位分割为一组数据字,并逐个地把这组数据字写入CRC_DR寄存器(既下图中的绿色框),写完所有的数据字后,就可以从CRC_DR寄存器(既下图中的兰色框)读出计算的结果。注意:虽然读写操作都是针对CRC_DR寄存器,但实际上是访问的不同物理寄存器。有几点需要说明:1)上述算法中变量CRC,在每次循环结束包含了计算的余数,它始终是向左移位(既从最低位向最高位移动),溢出的数据位被丢弃。2)输入的数据始终是以32位为单位,如果原始数据少于32位,需要在低位补0,当然也可以高位补0。3)假定输入的DWORD数组中每个分量是按小端存储。4)输入数据是按照最高位最先计算,最低位最后计算的顺序进行。例如:如果输入0x,内存中按字节存放的顺序是:0x41, 0x42, 0x43, 0x44。计算的结果是:0xCF534AE1如果输入0x,内存中按字节存放的顺序是:0x44, 0x43, 0x42, 0x41。计算的结果是:0xABCF9A63STM32中定时器的时钟源STM32中有多达8个定时器,其中TIM1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生。其它6个为普通定时器,时钟由APB1的输出产生。下图是STM32参考手册上时钟分配图中,有关定时器时钟部分的截图:从图中可以看出,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或APB2的一个倍频器,图中的蓝色部分。下面以定时器2~7的时钟说明这个倍频器的作用:当APB1的预分频系数为1时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8或16)时,这个倍频器起作用,定时器的时钟频率等于APB1的频率两倍。假定AHB=36MHz,因为APB1允许的最大频率为36MHz,所以APB1的预分频系数可以取任意数值;当预分频系数=1时,APB1=36MHz,TIM2~7的时钟频率=36MHz(倍频器不起作用);当预分频系数=2时,APB1=18MHz,在倍频器的作用下,TIM2~7的时钟频率=36MHz。有人会问,既然需要TIM2~7的时钟频率=36MHz,为什么不直接取APB1的预分频系数=1?答案是:APB1不但要为TIM2~7提供时钟,而且还要为其它外设提供时钟;设置这个倍频器可以在保证其它外设使用较低时钟频率时,TIM2~7仍能得到较高的时钟频率。再举个例子:当AHB=72MHz时,APB1的预分频系数必须大于2,因为APB1的最大频率只能为36MHz。如果APB1的预分频系数=2,则因为这个倍频器,TIM2~7仍然能够得到72MHz的时钟频率。能够使用更高的时钟频率,无疑提高了定时器的分辨率,这也正是设计这个倍频器的初衷。STM32中外部中断与外部事件这张图是一条外部中断线或外部事件线的示意图,图中信号线上划有一条斜线,旁边标志19字样的注释,表示这样的线路共有19套。图中的蓝色虚线箭头,标出了外部中断信号的传输路径,首先外部信号从编号1的芯片管脚进入,经过编号2的边沿检测电路,通过编号3的或门进入中断“挂起请求寄存器”,最后经过编号4的与门输出到NVIC中断控制器;在这个通道上有4个控制选项,外部的信号首先经过边沿检测电路,这个边沿检测电路受上升沿或下降沿选择寄存器控制,用户可以使用这两个寄存器控制需要哪一个边沿产生中断,因为选择上升沿或下降沿是分别受2个平行的寄存器控制,所以用户可以同时选择上升沿或下降沿,而如果只有一个寄存器控制,那么只能选择一个边沿了。接下来是编号3的或门,这个或门的另一个输入是“软件中断/事件寄存器”,从这里可以看出,软件可以优先于外部信号请求一个中断或事件,既当“软件中断/事件寄存器”的对应位为“1”时,不管外部信号如何,编号3的或门都会输出有效信号。一个中断或事件请求信号经过编号3的或门后,进入挂起请求寄存器,到此之前,中断和事件的信号传输通路都是一致的,也就是说,挂起请求寄存器中记录了外部信号的电平变化。外部请求信号最后经过编号4的与门,向NVIC中断控制器发出一个中断请求,如果中断屏蔽寄存器的对应位为“0”,则该请求信号不能传输到与门的另一端,实现了中断的屏蔽。明白了外部中断的请求机制,就很容易理解事件的请求机制了。图中红色虚线箭头,标出了外部事件信号的传输路径,外部请求信号经过编号3的或门后,进入编号5的与门,这个与门的作用与编号4的与门类似,用于引入事件屏蔽寄存器的控制;最后脉冲发生器把一个跳变的信号转变为一个单脉冲,输出到芯片中的其它功能模块。在这张图上我们也可以知道,从外部激励信号来看,中断和事件是没有分别的,只是在芯片内部分开,一路信号会向CPU产生中断请求,另一路信号会向其它功能模块发送脉冲触发信号,其它功能模块如何相应这个触发信号,则由对应的模块自己决定。在图上部的APB总线和外设模块接口,是每一个功能模块都有的部分,CPU通过这样的接口访问各个功能模块,这里就不再赘述了。深圳广州郑州长沙南宁STM32学习详情联系郭老师q,可添加免费预约体验哦STM32的USART发送数据时如何使用TXE和TC标志在USART的发送端有2个寄存器,一个是程序可以看到的USART_DR寄存器(下图中阴影部分的TDR),另一个是程序看不到的移位寄存器(下图中阴影部分Transmit Shift Register)。对应USART数据发送有两个标志,一个是TXE=发送数据寄存器空,另一个是TC=发送结束;对照下图,当TDR中的数据传送到移位寄存器后,TXE被设置,此时移位寄存器开始向TX信号线按位传输数据,但因为TDR已经变空,程序可以把下一个要发送的字节(操作USART_DR)写入TDR中,而不必等到移位寄存器中所有位发送结束,所有位发送结束时(送出停止位后)硬件会设置TC标志。另一方面,在刚刚初始化好USART还没有发送任何数据时,也会有TXE标志,因为这时发送数据寄存器是空的。TXEIE和TCIE的意义很简单,TXEIE允许在TXE标志为'1'时产生中断,而TCIE允许在TC标志为'1'时产生中断。至于什么时候使用哪个标志,需要根据你的需要自己决定。但我认为TXE允许程序有更充裕的时间填写TDR寄存器,保证发送的数据流不间断。TC可以让程序知道发送结束的确切时间,有利于程序控制外部数据流的时序。STM32设置了很多非常有用和灵活的控制和状态位,只要你很好地掌握了它们的用法,可以让你的应用更加精确和高效。深圳STM32技术实训提升QQ这是STM32技术参考手册中的一页:在STM32中如何配置片内外设使用的IO端口首先,一个外设经过配置输入的时钟和初始化后即被激活(开启)。如果需要使用该外设的输入输出管脚,则需要配置相应的GPIO端口;否则该外设对应的输入输出管脚可以做普通GPIO管脚使用。
收藏了!mark一下
已收藏
还有没有,更新来看看咯,觉得很好
针对STM32应用中的重点和难点部分,触摸屏,UC/OS及文件系统,PID控制,CAN总线;提供项目开发及技术培训.
STM32时钟系统小结在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。、HSI是高速内部时钟,RC振荡器,频率为8MHz。②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。③、LSI是低速内部时钟,RC振荡器,频率为40kHz。④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。⑤、PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。其中40kHz的LSI供独立看门狗IWDG使用,另外它还可以被选择为实时时钟RTC的时钟源。另外,实时时钟RTC的时钟源还可以选择LSE,或者是HSE的128分频。RTC的时钟源通过RTCSEL[1:0]来选择。STM32中有一个全速功能的USB模块,其串行接口引擎需要一个频率为48MHz的时钟源。该时钟源只能从PLL输出端获取,可以选择为1.5分频或者1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz或72MHz。另外,STM32还可以选择一个时钟信号输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者系统时钟。系统时钟SYSCLK,它是供STM32中绝大部分部件工作的时钟源。系统时钟可选择为PLL输出、HSI或者HSE。系统时钟最大频率为72MHz,它通过AHB分频器分频后送给各模块使用,AHB分频器可选择1、2、4、8、16、64、128、256、512分频。其中AHB分频器输出的时钟送给5大模块使用:①、送给AHB总线、内核、内存和DMA使用的HCLK时钟。②、通过8分频后送给Cortex的系统定时器时钟。③、直接送给Cortex的空闲运行时钟FCLK。④、送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给定时器(Timer)2、3、4倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2、3、4使用。⑤、送给APB2分频器。APB2分频器可选择1、2、4、8、16分频,其输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给定时器(Timer)1倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器1使用。另外,APB2分频器还有一路输出供ADC分频器使用,分频后送给ADC模块使用。ADC分频器可选择为2、4、6、8分频。在以上的时钟输出中,有很多是带使能控制的,例如AHB总线时钟、内核时钟、各种APB1外设、APB2外设等等。当需要使用某模块时,记得一定要先使能对应的时钟。需要注意的是定时器的倍频器,当APB的分频为1时,它的倍频值为1,否则它的倍频值就为2。连接在APB1(低速外设)上的设备有:电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看门狗、Timer2、Timer3、Timer4。注意USB模块虽然需要一个单独的48MHz时钟信号,但它应该不是供USB模块工作的时钟,而只是提供给串行接口引擎(SIE)使用的时钟。USB模块工作的时钟应该是由APB1提供的。连接在APB2(高速外设)上的设备有:UART1、SPI1、Timer1、ADC1、ADC2、所有普通IO口(PA~PE)、第二功能IO口。深圳专业STM32技术学习郭老师QQ使用HSE时钟,程序设置时钟参数流程:1、将RCC寄存器重新设置为默认值 RCC_DeI2、打开外部高速时钟晶振HSE RCC_HSEConfig(RCC_HSE_ON);3、等待外部高速时钟晶振工作 HSEStartUpStatus = RCC_WaitForHSEStartUp();4、设置AHB时钟 RCC_HCLKC5、设置高速AHB时钟 RCC_PCLK2C6、设置低速速AHB时钟 RCC_PCLK1C7、设置PLL RCC_PLLC8、打开PLL RCC_PLLCmd(ENABLE);9、等待PLL工作 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)10、设置系统时钟 RCC_SYSCLKC11、判断是否PLL是系统时钟 while(RCC_GetSYSCLKSource() != 0x08)12、打开要使用的外设时钟 RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd() 想更系统学习STM32的伙伴们可联系郭老师q
深圳-广州-长沙-南宁-郑州均有学习中心
如何掌握高性能、低成本、低功耗ARM Cortex-M3高薪技术?ARM Cortex-M3 处理器是行业领先的 32 位处理器:高性能、低成本、低功耗,适用于具有较高确定性的实时应用,它经过专门开发,可使合作伙伴针对广泛的设备(包括微控制器、汽车车身系统、工业控制系统以及无线网络和传感器)开发高性能低成本平台。此处理器具有出色的计算性能以及对事件的优异系统响应能力,同时可应实际中对低动态和静态功率需求的挑战。此处理器配置十分灵活,从而支持广泛的实现形式(从需要内存保护和强大 trace 技术的实现形式,直至需要极小面积的成本敏感型设备)。嵌入式ARM Cortex-M3技术学习培训,工程师面对面小班授课,实操项目为主。详情了解体验联系郭老师qq
咨询热线如何系统学习ARM Cortex-M3:第一阶段:C语言编程及基本数电知识
1)熟悉C语言及编程;
2)了解常用电子元器件、常用芯片知识及其使用方法;
3)介绍电子产品开发、生产的基本流程;
4)加强电子元器件焊接水平;
5)了解ads、Keil等编译环境的学习与使用;
6)了解H-Link、H-Flasher环境的学习与使用。 第二阶段:掌握ARM的体系结构,应用及学习方法等,详细学习Cortex-M3内核体系结构
Cortex-M3总体介绍
处理器内核介绍
处理器工作模式
处理器异常处理
2. Thumb2指令集
3. 基于Cortex-M3的嵌入式软件编程
熟悉MDK开发环境
编译、调试基于Thumb2指令的应用程序
编写程序实现工作模式切换、异常处理 第三阶段:掌握Cortex-M3处理器的接口开发。本部分内容实用性及实践性较强,课程在分析接口操作方法后,安排了大量的实验。通过学习,学员可以掌握多种接口操作的原理及Cortex-M3处理器的接口编程。Cortex-M3处理器简介
内存及启动模式
外围模块及特点简介
usb device实验第四阶段了解uC/OS-II操作系统结构、各个重要功能部分的概念及实现原理,在此基础上掌握uC/OS-II系统移植的方法,uC/OS-II操作系统分析及移植
操作系统及uC/OS-II 概述
任务、进程概念
内核数据结构
内核调度算法
系统中断处理
系统移植方法实验: 在Cortex-M3开发板上uC/OS-II应用程序
uC/OS-II应用程序编写、调试方法
多任务开发
任务间的通信与同步
任务优先级控
LED控制应用程序
任务间通信实验
7 串口控制应用程序
LCD控制应用程序第五阶段:国际项目管理、电子产品项目管理知识详解
1)国际项目管理概述;
2)国际项目管理三要素;
3)电子产品开发规划、流程;
4)工作分解表WBS
5)甘特图;
6)电子产品项目计划书编制。第六阶段:项目实操根据自身情况可选择相关项目实操,例如智能家居控制、模拟驾校考试系统、医疗器械控制、点菜机控制等产品。年底狂欢,即日起至1月30日止,凡报名STM32课程即有机会赢取课程现金卷一张(可抵学费)或赠送C语言课程(仅限前15名),免费咨询热线:郭老师或添加qq
深圳-广州-郑州-长沙-南宁均可授课,实操与项目为主。公司网站:
STM32在protues中找不到仿真的
谢谢大家的支持
好东西,收藏啦
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或}

我要回帖

更多关于 stm32程序运行时间 的文章

更多推荐

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

点击添加站长微信