ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:1.38MB ,
资源ID:17589865      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-17589865.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(keil的软件逻辑分析仪使用教程.docx)为本站会员(b****0)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

keil的软件逻辑分析仪使用教程.docx

1、keil的软件逻辑分析仪使用教程keil的软件逻辑分析仪( logic analyzer)使用教程在keilMDK中软件逻辑分析仪很强的功能,可以分析数字信号,模拟化的信号,CPU的总线(UART、IIC等一切有输出的管脚),提供调试函数机制,用于产生自定义的信号,如Sin,三角波、澡声信号等,这些都可以定义。以keil里自带的stm32的CPU为例,对PWM波形跟踪观测,打开C:KeilARMBoardsKeilMCBSTM32PWM_2目录下的stm32的Dome,第一步:进行仿真配置,如图:(原文件名:1.jpg)把开工程中的Abstract.txt文件有对工程的描述,PWM从PB0.8

2、和PB0.9输出,稍后将它加入软件逻辑分析仪里。ThePWMprojectisasimpleprogramfortheSTM32F103RBT6usingKeilMCBSTM32EvaluationBoardanddemonstratingtheuseofPWM(PulseWidthModulation)withTimerTIM4.Examplefunctionality:-ClockSettings:-XTAL=8.00MHz-SYSCLK=72.00MHz-HCLK=SYSCLK=72.00MHz-PCLK1=HCLK/2=36.00MHz-PCLK2=HCLK=72.00MHz-ADCL

3、K=PCLK2/6=12.00MHz-SYSTICK=HCLK/8=9.00MHz-TIM4isrunningat100Hz.LEDsPB8,PB9aredimmedusingthePWMfunctionofTIM4channel3,channel4TheTimerprogramisavailableindifferenttargets:Simulator:-configuredforsoftwareSimulatorMCBSTM32:-runsfromInternalFlashlocatedonchip(usedforproductionortargetdebugging)第二、选择软件仿真

4、(原文件名:2.jpg)第三、编译程序,如果程序没有错的话,将出现以下线框编译信息,然后进入调试,点出红色的“D按,如下图所示(原文件名:3.jpg)第四步、打开软件逻辑分析仪图标,并把要观察的波形信号拉到逻辑分析仪里,如果进入调试状态下没有sysbols标签话,点击“View”菜单弹出来,从“PeripheralRegister”里把要观察的(GPIOB_IDR输出的PWM信号会从这个寄存器反映出来)信号拖到逻辑析分析里,(原文件名:4.jpg)第五步、把不用的bit屏蔽掉,并按bit形式显示,配置如图(原文件名:5.jpg)第六步,点“GO”按钮进入全速运行,OK,PWM波形出来了,用IN

5、和OUT可以调扫描时间,如下图STM32学习心得笔记 憨牛电子时钟篇在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。、HSI是高速内部时钟,RC振荡器,频率为8MHz。、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz16MHz。、LSI是低速内部时钟,RC振荡器,频率为40kHz。、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。、PLL为锁相环倍频 输出 ,其时钟 输入 源可选择为HSI/2、HSE或者HSE/2。倍频可选择为216倍,但是其输出频率最大不得超过72MHz。其中40kHz的LSI供独立看门狗IWDG使用,另

6、外它还可以被选择为实时时钟RTC的时钟源。另外,实时时钟RTC的时钟源还可以选择LSE,或者是HSE的128分频。RTC的时钟源通过RTCSEL1:0来选择。STM32中有一个全速 功能 的 USB 模块 ,其串行 接口 引擎需要一个频率为48MHz的时钟源。该时钟源只能从PLL输出端获取,可以选择为1.5分频或者1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz或72MHz。另外,STM32还可以选择一个时钟 信号 输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者 系统 时钟。系统时钟SYSCLK,它是供STM32中绝大部分部件

7、工作的时钟源。系统时钟可选择为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倍频器使用。该倍频器可

8、选择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时

9、,它的倍频值为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口(PAPE)、第二功能IO口。下图是STM32用户手册中的时钟系统结构图,通过该图可

10、以从总体上掌握STM32的时钟系统。管脚篇我们操作STM32过程中对管脚的操作是比较频繁的工作之一,我们一般用提供的封装库来进行操作,因为它直观方便。我们常用的有:GPIO_SetBits();GPIO_Writebit();GPIO_ResetBits();GPIO_ReadInputBit();GPIO_ReadOutputBit();等等它们具体怎么操作的我们是不用管的给我们一个接口就足够了,但是想学好STM32下一步最好使用它的原子操作,下面我们先学习一下关于管脚端口的一些寄存器。由于上述命令操作是调用的一些函数故可能在调用的过程中可能被中断所打断产和想不到的后果但是如果调用寄存器函可

11、以在一个时钟周期内完成,所以在一些关键的场合要使用对原子的直接访问。要用到的寄存器有置位复位寄存器GPIOx_BSRR和复位寄存器GPIOx_BRR,后者是前者的一个子功能,GPIOx_BSRR包括置和复位二功能, 高16位是复位功能低16位是置位功能,高16位中对应位置1表示要复位这一管脚,其它写入0的位不改变原有的电平,而低16位置1是真的要使其位输出置1。对于GPIOxBRR寄存器写入对应位1时表示要复位输出这一管脚,复位时用哪个寄存器随你便好了,但是要使其置1时只能使用GPIOx_BSRR了。说到这里你可能要说了:GPIOx_ODR不可以嘛?是真的可以,但是这里的输出0和1都是要反映到

12、管脚是的,对于我们仅需要操作1个管脚时还要兼顾其它不需要改变的PIN,所以我们最好不要用这个寄存器来进行直接的操作。常用的几个寄存器:上面的二个寄存器是设置寄存器的是输入还是输出,输入中包括模拟输入、上拉/下拉输入、还是悬空输入。输出包括:推挽输出、开漏输出、复用推挽输出、复用开漏输出。这个一个在程序初始化时要做的工作,利用封装的函数还是挺好的这点要是利用寄存器操作就划不来了。读取端口管脚就是读取 ch = GPIOx-IDR; 就是这么简单。就是把一个16位的管脚值送给这个寄存器如:GPIOx-ODRch,如果只改变其中一管脚原来的不变,置1时没有问题可以这样做GPIOx-ODR |=1OD

13、R &= (1BRR=0x00008000方便些。前面的0x00008000只第15脚而已。下面贴出复位/置位寄存器和复位寄存器来不说了。下面通过宏命令,使控制GPIO来的更加方便#define BITBAND(addr bitnum) (addr & 0xF0000000)+0x2000000+(addr&0xFFFFF)5)+(bitnum2)#define MEM_ADDR(addr) *(volatile unsigned long *)(addr)#define BIT_ADDR(addr bitnum) MEM_ADDR(BITBAND(addr bitnum)/IO#define

14、 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

15、 GPIOG_ODR_Addr (GPIOG_BASE+12) /0x40011E0C#define GPIOA_IDR_Addr (GPIOA_BASE+8) /0x40010808#define GPIOB_IDR_Addr (GPIOB_BASE+8) /0x40010C08#define GPIOC_IDR_Addr (GPIOC_BASE+8) /0x40011008#define GPIOD_IDR_Addr (GPIOD_BASE+8) /0x40011408#define GPIOE_IDR_Addr (GPIOE_BASE+8) /0x40011808#define GPIO

16、F_IDR_Addr (GPIOF_BASE+8) /0x40011A08#define GPIOG_IDR_Addr (GPIOG_BASE+8) /0x40011E08/IO IO!/n 16!#define PAout(n) BIT_ADDR(GPIOA_ODR_Addrn) /#define PAin(n) BIT_ADDR(GPIOA_IDR_Addrn) /#define PBout(n) BIT_ADDR(GPIOB_ODR_Addrn) /#define PBin(n) BIT_ADDR(GPIOB_IDR_Addrn) /#define PCout(n) BIT_ADDR(G

17、PIOC_ODR_Addrn) /#define PCin(n) BIT_ADDR(GPIOC_IDR_Addrn) /#define PDout(n) BIT_ADDR(GPIOD_ODR_Addrn) /#define PDin(n) BIT_ADDR(GPIOD_IDR_Addrn) /#define PEout(n) BIT_ADDR(GPIOE_ODR_Addrn) /#define PEin(n) BIT_ADDR(GPIOE_IDR_Addrn) /#define PFout(n) BIT_ADDR(GPIOF_ODR_Addrn) /#define PFin(n) BIT_AD

18、DR(GPIOF_IDR_Addrn) /#define PGout(n) BIT_ADDR(GPIOG_ODR_Addrn) /#define PGin(n) BIT_ADDR(GPIOG_IDR_Addrn) /#define led0=PAout(8)使用时可以led0=0; 或者led01; 像不像51中的控制。这样led0就可以像51系统中那样控制某一管脚的高低了,是不是很方便。这是比前面的应用的方便性上更加进了一步,只是前面要做一些提前的预备工作了。全局中断禁止和允许在51系统中都有全局中断允许/禁止位,那在Cortex-M3中这个位在哪呢?这的水很深,请看在Core_m3.h中有

19、static _INLINE void _enable_irq() _ASM volatile (cpsie i); static _INLINE void _disable_irq() _ASM volatile (cpsid i); static _INLINE void _enable_fault_irq() _ASM volatile (cpsie f); static _INLINE void _disable_fault_irq() _ASM volatile (cpsid f); static _INLINE void _NOP() _ASM volatile (nop); st

20、atic _INLINE void _WFI() _ASM volatile (wfi); static _INLINE void _WFE() _ASM volatile (wfe); static _INLINE void _SEV() _ASM volatile (sev); static _INLINE void _ISB() _ASM volatile (isb); static _INLINE void _DSB() _ASM volatile (dsb); static _INLINE void _DMB() _ASM volatile (dmb); static _INLINE

21、 void _CLREX() _ASM volatile (clrex); 使用前二条_enable_irq();_disable_irq()就可以打开和关闭所有的中断了,这是在库版本在V3.0以上的情况。而对于V2.0则要用NVIC_SETFAULTMASK(); /关闭总中断NVIC_RESETFAULTMASK();/开放总中断 来实现了。像51一样操作STM32的IO2010-10-14 09:28:38|分类:STM32学习|标签:definebit_addr输出输入addr|字号订阅/-/别名区 ADDRESS=0x4200 0000 + (0x0001 100C*0x20) +

22、(bitx*4) ;bitx:第x位/ 把“位段地址位序号”转换别名地址宏#define BITBAND(addr, bitnum) (addr & 0xF0000000)+0x2000000+(addr &0xFFFFF)5)+(bitnum2)/把该地址转换成一个指针#define MEM_ADDR(addr) *(volatile unsigned long *)(addr)#define BIT_ADDR(addr, bitnum) MEM_ADDR( BITBAND(addr, bitnum) )#define GPIOA_ODR_Addr (GPIOA_BASE+12) /0x40

23、01080C#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 GPIOA_IDR_Addr (GPIOA_BASE+8) /0x40010808#define GPIOB_IDR_Addr (GPIOB_BASE+8) /0x4001

24、0C08#define GPIOC_IDR_Addr (GPIOC_BASE+8) /0x40011008#define GPIOD_IDR_Addr (GPIOD_BASE+8) /0x40011408#define GPIOE_IDR_Addr (GPIOE_BASE+8) /0x40011808/-#define PA0 BIT_ADDR(GPIOA_ODR_Addr, 0) /输出#define PA1 BIT_ADDR(GPIOA_ODR_Addr, 1) /输出#define PA2 BIT_ADDR(GPIOA_ODR_Addr, 2) /输出#define PA3 BIT_AD

25、DR(GPIOA_ODR_Addr, 3) /输出#define PA4 BIT_ADDR(GPIOA_ODR_Addr, 4) /输出#define PA5 BIT_ADDR(GPIOA_ODR_Addr, 5) /输出#define PA6 BIT_ADDR(GPIOA_ODR_Addr, 6) /输出#define PA7 BIT_ADDR(GPIOA_ODR_Addr, 7) /输出#define PA8 BIT_ADDR(GPIOA_ODR_Addr, 8) /输出#define PA9 BIT_ADDR(GPIOA_ODR_Addr, 9) /输出#define PA10 BIT_

26、ADDR(GPIOA_ODR_Addr, 10) /输出#define PA11 BIT_ADDR(GPIOA_ODR_Addr, 11) /输出#define PA12 BIT_ADDR(GPIOA_ODR_Addr, 12) /输出#define PA13 BIT_ADDR(GPIOA_ODR_Addr, 13) /输出#define PA14 BIT_ADDR(GPIOA_ODR_Addr, 14) /输出#define PA15 BIT_ADDR(GPIOA_ODR_Addr, 15) /输出#define PA0in BIT_ADDR(GPIOA_IDR_Addr, 0) /输入#d

27、efine PA1in BIT_ADDR(GPIOA_IDR_Addr, 1) /输入#define PA2in BIT_ADDR(GPIOA_IDR_Addr, 2) /输入#define PA3in BIT_ADDR(GPIOA_IDR_Addr, 3) /输入#define PA4in BIT_ADDR(GPIOA_IDR_Addr, 4) /输入#define PA5in BIT_ADDR(GPIOA_IDR_Addr, 5) /输入#define PA6in BIT_ADDR(GPIOA_IDR_Addr, 6) /输入#define PA7in BIT_ADDR(GPIOA_IDR

28、_Addr, 7) /输入#define PA8in BIT_ADDR(GPIOA_IDR_Addr, 8) /输入#define PA9in BIT_ADDR(GPIOA_IDR_Addr, 9) /输入#define PA10in BIT_ADDR(GPIOA_IDR_Addr, 10) /输入#define PA11in BIT_ADDR(GPIOA_IDR_Addr, 11) /输入#define PA12in BIT_ADDR(GPIOA_IDR_Addr, 12) /输入#define PA13in BIT_ADDR(GPIOA_IDR_Addr, 13) /输入#define PA14in BIT_ADDR(GPIOA_

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2