资源预览内容
第1页 / 共25页
第2页 / 共25页
第3页 / 共25页
第4页 / 共25页
第5页 / 共25页
第6页 / 共25页
第7页 / 共25页
第8页 / 共25页
第9页 / 共25页
第10页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
keil 的软件逻辑分析仪( logic analyzer)使用教程在 keil MDK 中软件逻辑分析仪很强的功能,可以分析数字信号,模拟化的信号,CPU 的总线(UART、IIC 等一切有输出的管脚),提供调试函数机制,用于产生自定义的信号,如 Sin,三角波、澡声信号等,这些都可以定义。以 keil 里自带的 stm32 的 CPU 为例,对 PWM 波形跟踪观测,打开C:KeilARMBoardsKeilMCBSTM32PWM_2 目录下的 stm32 的 Dome,第一步:进行仿真配置,如图:(原文件名:1.jpg) 把开工程中的 Abstract.txt 文件有对工程的描述,PWM 从 PB0.8 和 PB0.9 输出,稍后将它加入软件逻辑分析仪里。 The PWM project is a simple program for the STM32F103RBT6 using Keil MCBSTM32 Evaluation Board and demonstrating the use of PWM (Pulse Width Modulation) with Timer TIM4 .Example functionality: - Clock Settings:- XTAL = 8.00 MHz- SYSCLK = 72.00 MHz- HCLK = SYSCLK = 72.00 MHz- PCLK1 = HCLK/2 = 36.00 MHz- PCLK2 = HCLK = 72.00 MHz- ADCLK = PCLK2/6 = 12.00 MHz- SYSTICK = HCLK/8 = 9.00 MHz- TIM4 is running at 100Hz.LEDs PB8, PB9 are dimmed using the PWM function of TIM4 channel3, channel4The Timer program is available in different targets:Simulator: - configured for software SimulatorMCBSTM32: - runs from Internal Flash located on chip(used for production or target debugging)第二、选择软件仿真(原文件名:2.jpg) 第三、编译程序,如果程序没有错的话,将出现以下线框编译信息,然后进入调试,点出红色的“D 按 ,如下图所示(原文件名:3.jpg) 第四步、打开软件逻辑分析仪图标,并把要观察的波形信号拉到逻辑分析仪里,如果进入调试状态下没有sysbols标签话,点击“View”菜单弹出来,从“Peripheral Register”里把要观察的(GPIOB_IDR 输出的 PWM 信号会从这个寄存器反映出来)信号拖到逻辑析分析里,(原文件名:4.jpg) 第五步、把不用的 bit 屏蔽掉,并按 bit 形式显示,配置如图(原文件名:5.jpg) 第六步,点“GO”按钮进入全速运行, OK,PWM 波形出来了,用 IN 和 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 使用,另外它还可以被选择为实时时钟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 中绝大部分部件工作的时钟源。系统时钟可选择为 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 口(PAPE)、第二功能 IO 口。 下图是 STM32 用户手册中的时钟系统结构图,通过该图可以从总体上掌握STM32 的时钟系统。 管脚篇我们操作 STM32 过程中对管脚的操作是比较频繁的工作之一,我们一般用提供的封装库来进行操作,因为它直观方便。我们常用的有:GPIO_SetBits();GPIO_Writebit();GPIO_ResetBits();GPIO_ReadInputBit();GPIO_ReadOutputBit();等等它们具体怎么操作的我们是不用管的给我们一个接口就足够了,但是想学好 STM32 下一步最好使用它的原子操作,下面我们先学习一下关于管脚端口的一些寄存器。由于上述命令操作是调用的一些函数故可能在调用的过程中可能被中断所打断产和想不到的后果但是如果调用寄存器函可以在一个时钟周期内完成,所以在一些关键的场合要使用对原子的直接访问。要用到的寄存器有置位复位寄存器GPIOx_BSRR 和复位寄存器 GPIOx_BRR,后者是前者的一个子功能,GPIOx_BSRR 包括置和复位二功能, 高 16 位是复位功能低 16 位是置位功能,高 16 位中对应位置 1 表示要复位这一管脚,其它写入 0 的位不改变原有的电平,而低 16 位置 1 是真的要使其位输出置 1。对于 GPIOxBRR 寄存器写入对应位 1 时表示要复位输出这一管脚,复位时用哪个寄存器随你便好了,但是要使其置 1 时只能使用GPIOx_BSRR 了。说到这里你可能要说了:GPIOx_ODR 不可以嘛?是真的可以,但是这里的输出 0 和 1 都是要反映到管脚是的,对于我们仅需要操作 1 个管脚时还要兼顾其它不需要改变的 PIN,所以我们最好不要用这个寄存器来进行直接的操作。常用的几个寄存器: 上面的二个寄存器是设置寄存器的是输入还是输出,输入中包括模拟输入、上拉/下拉输入、还是悬空输入。输出包括:推挽输出、开漏输出、复用推挽输出、复用开漏输出。这个一个在程序初始化时要做的工作,利用封装的函数还是挺好的这点要是利用寄存器操作就划不来了。读取端口管脚就是读取 ch = GPIOx-IDR; 就是这么简单。就是把一个 16 位的管脚值送给这个寄存器如:GPIOx-ODRch,如果只改变其中一管脚原来的不变,置 1 时没有问题可以这样做 GPIOx-ODR |=1ODR &= (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 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) /0x40010808 #define GPIOB_IDR_Addr (GPIOB_BASE+8) /0x40010C08 #define G
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号