keil的软件逻辑分析仪使用教程
- 格式:doc
- 大小:1.65 MB
- 文档页数:25
用Keil C软件自带的逻辑分析仪仿真HT1621驱动的段码型LCD 一:大体按图示3步进行,首先对项目进行编译OK,其次对软件仿真设置,最后调试输出。
二:在debug项下勾选“Use Simulator”
三:进入Debug,进入调试界面
(P2_0, P2_1, P2_2是我这块板上对应的HT1621与MCU连接的3个硬件引脚,分别对应CS/,WR/,Data。
)
点击”Logic Analyzer”的Setup,进入设置界面,因P2_0, P2_1, P2_2均以位输出,所以在”Display Type”中要设置成”Bit”,并设置不同的颜色,对示区分波形。
点击全速运行后,调节逻辑分析仪的缩放,输出合适的波形。
说明:
对应HT1621、HT1621B、HT1620等手册,对波形进行解析(已解析)
101(兰色字)是3位命令码,表示写模式
000101(红色字)是6位地址码,RAM的地址是0X05
0011(黑色字)是4位数据码,RAM的数据是0X03
也就是说,此波形的含义是在对应LCD的SEG5与COM1、COM0相交的字段点亮了。
可以过LCD实物验证。
最后说明:
本人对比硬件逻辑分析仪,波形相似度相当高。
用Keil C软件自带的逻辑分析仪仿真对于编程调试还是相当有用的,如PWM、UART等。
对于更复杂的处理也是无能为力的,比如触发方式、采样率、采样深度的设置,测量解析波形数据,如各种协议等,还得依赖硬件的逻辑分析仪。
声明: 本文来自分析仪开发手册.pdf)前言一、什么是逻辑分析仪二、使用介绍三、安装说明四、Saleae软件使用方法五、逻辑分析仪硬件安装六、使用Saleae分析电视红外遥控器通信协议七、使用Saleae分析UART通信八、使用Saleae分析IIC总线通信九、使用Saleae分析SPI总线通信十、Saleae逻辑分析仪使用问题和注意事项淘宝地址:(原文件名:21.jpg)前言:工欲善其事,必先利其器。
逻辑分析仪是电子行业不可或缺的工具。
但是由于一直以来,逻辑分析仪都属于高端产品,所以价格居高不下。
因此我们首先要感谢Cypress公司,提供给我们68013这么好的芯片,感谢俄罗斯毛子哥将这个Saleae逻辑分析仪开源出来,让我们用平民的价格,就可以得到贵族的待遇,获得一款性价比如此之高的逻辑分析仪,可以让我们在进行数字逻辑分析仪的时候,快速查找并且解决许多信号、时序等问题,进一步提高我们处理实际问题的能力。
原本计划,直接将Saleae的英文版本使用手册直接翻译过来提供给大家,我花费半天时间翻译完后,发现外国人写的东西不太符合我们国人的思维习惯,当然,也是由于我的英语水平有限,因此,我根据自己摸索这个Saleae的过程,写了一份个人认为符合中国人习惯的Saleae,提供给大家,希望大家在使用过程中少走弯路,快速掌握使用方法,更快的解决自己实际遇到的问题。
由于个人水平有限,因此在文章撰写的过程中难免存在问题和错误,如果有任何问题,希望大家能够提出来,我会虚心接受并且改进,希望通过我们的交流,给越来越多的人提供更加优秀的资料,共同进步。
一、什么是逻辑分析仪:逻辑分析仪是一种类似于示波器的波形测试设备,它通过采集指定的信号,并通过图形或者数据统计化的方式展示给开发人员,开发人员通过这些图形化时序信号按照协议来分析硬件或者软件中的错误。
逻辑分析仪是设计中不可缺少的设备,通过它,可以迅速定位错误,发现并解决问题,达到事半功倍的效果,尤其在分析时序,比如1wire、I2C、UART、SPI、CAN等数据的时候,应用逻辑分析仪解决问题非常快速。
keil的软件逻辑分析仪(logic analyzer)使用教程在keil MDK中软件逻辑分析仪很强的功能,可以分析数字信号,模拟化的信号,CPU的总线(UART、IIC等一切有输出的管脚),提供调试函数机制,用于产生自定义的信号,如Sin,三角波、澡声信号等,这些都可以定义。
以keil里自带的stm32的CPU为例,对PWM波形跟踪观测,打开C:\Keil\ARM\Boards\Keil\MCBSTM32\PWM_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' Evalua tion 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。
KEIL 逻辑分析仪的使用
Osprey----- 2016/11/2
以STM32F103RET6,外接8M晶振,输出引脚PA.7,70Khz为例.每一步都很重要。
1.准备输出PWM的程序
2.设置时钟,设置为8M。
点击图示,进入配置页面。
在Target中配置8M晶振,在同一
界面的Debug配置为仿真模式
3.进入仿真界面,点击Debug 图标。
4.找到逻辑分析仪界面。
点击所示,即可出现窗口。
也可在View菜单中找分析窗口。
4.点击Setup ,进入设置界面,如图,敲上porta.7 (PA7引脚),按回车键,点击Close然后
在回到这个界面设置Display Type为bit,表示显示位。
再Close。
以下是最终结果。
5.先开始运行程序一会再停止。
注意一定要停止,否则分析窗口不会出现波形。
6.最后就是窗口的使用了,将光标点(不是移)在窗口上,鼠标滚轮移动可以调节波形大小,左击波形的某个位置,再点击移动光标置另一个位置,就会显示时间差和频率。
可以放大后再确定位置。
keil使用教程Keil是一款被广泛应用于嵌入式系统开发的集成开发环境(IDE)。
本文将为您提供使用Keil的简单教程,没有标题,请阅读以下步骤:1. 下载并安装Keil:您可以从Keil官方网站下载最新版的Keil软件。
安装程序将引导您完成安装过程。
2. 创建新工程:打开Keil软件后,您可以选择创建一个新工程。
在“File”菜单中选择“New Project”选项。
3. 选择芯片型号:根据您的需求,选择一个适合的芯片型号。
Keil支持各种常见的微控制器和微处理器。
4. 配置工程设置:在创建工程后,您可以设置一些工程相关的选项。
例如,您可以指定输出文件的目录和名称,选择调试器的类型等。
5. 编写代码:在Keil的代码编辑器中,您可以编写C或汇编语言的代码。
您可以创建多个源文件,并将它们链接到一起。
6. 调试代码:Keil提供了强大的调试功能,可以帮助您调试代码。
您可以设置断点、单步调试、查看变量和寄存器的值等。
7. 编译和烧录代码:在调试之前,您需要编译代码。
Keil将会将源代码编译成可执行文件。
然后,您可以使用调试器将可执行文件烧录到目标硬件上。
8. 调试和测试:通过连接目标硬件,您可以使用Keil的调试器进行代码的调试和测试。
您可以监视变量的值、检查寄存器的状态,并通过单步调试来查找和修复错误。
9. 优化和验证:一旦代码调试完成,您可以进行性能优化和代码验证。
Keil提供了一些工具和选项,可以帮助您检查代码的质量和优化执行效率。
10. 生成最终可执行文件:完成所有的开发和调试后,您可以生成最终的可执行文件。
这个可执行文件是您将部署到最终产品中的版本。
这就是使用Keil的简单教程,希望能帮助您快速上手使用Keil进行嵌入式系统开发。
记得保存您的工程和代码,以便以后查找和使用。
声明: 本文来自分析仪开发手册.pdf)前言一、什么是逻辑分析仪二、使用介绍三、安装说明四、Saleae软件使用方法五、逻辑分析仪硬件安装六、使用Saleae分析电视红外遥控器通信协议七、使用Saleae分析UART通信八、使用Saleae分析IIC总线通信九、使用Saleae分析SPI总线通信十、Saleae逻辑分析仪使用问题和注意事项淘宝地址:(原文件名:21.jpg)前言:工欲善其事,必先利其器。
逻辑分析仪是电子行业不可或缺的工具。
但是由于一直以来,逻辑分析仪都属于高端产品,所以价格居高不下。
因此我们首先要感谢Cypress公司,提供给我们68013这么好的芯片,感谢俄罗斯毛子哥将这个Saleae逻辑分析仪开源出来,让我们用平民的价格,就可以得到贵族的待遇,获得一款性价比如此之高的逻辑分析仪,可以让我们在进行数字逻辑分析仪的时候,快速查找并且解决许多信号、时序等问题,进一步提高我们处理实际问题的能力。
原本计划,直接将Saleae的英文版本使用手册直接翻译过来提供给大家,我花费半天时间翻译完后,发现外国人写的东西不太符合我们国人的思维习惯,当然,也是由于我的英语水平有限,因此,我根据自己摸索这个Saleae的过程,写了一份个人认为符合中国人习惯的Saleae,提供给大家,希望大家在使用过程中少走弯路,快速掌握使用方法,更快的解决自己实际遇到的问题。
由于个人水平有限,因此在文章撰写的过程中难免存在问题和错误,如果有任何问题,希望大家能够提出来,我会虚心接受并且改进,希望通过我们的交流,给越来越多的人提供更加优秀的资料,共同进步。
一、什么是逻辑分析仪:逻辑分析仪是一种类似于示波器的波形测试设备,它通过采集指定的信号,并通过图形或者数据统计化的方式展示给开发人员,开发人员通过这些图形化时序信号按照协议来分析硬件或者软件中的错误。
逻辑分析仪是设计中不可缺少的设备,通过它,可以迅速定位错误,发现并解决问题,达到事半功倍的效果,尤其在分析时序,比如1wire、I2C、UART、SPI、CAN等数据的时候,应用逻辑分析仪解决问题非常快速。
keil的软件逻辑分析仪(logic analyzer)使用教程在keil MDK中软件逻辑分析仪很强的功能,可以分析数字信号,模拟化的信号,CPU的总线(UART、IIC等一切有输出的管脚),提供调试函数机制,用于产生自定义的信号,如Sin,三角波、澡声信号等,这些都可以定义。
以keil里自带的stm32的CPU为例,对PWM波形跟踪观测,打开C:\Keil\ARM\Boards\Keil\MCBSTM32\PWM_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' Evalua tion 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是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为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用户手册中的时钟系统结构图,通过该图可以从总体上掌握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。
对于GPIOx_BRR寄存器写入对应位1时表示要复位输出这一管脚,复位时用哪个寄存器随你便好了,但是要使其置1时只能使用GPIOx_BSRR了。
说到这里你可能要说了:GPIOx_ODR不可以嘛?是真的可以,但是这里的输出0和1都是要反映到管脚是的,对于我们仅需要操作1个管脚时还要兼顾其它不需要改变的PIN,所以我们最好不要用这个寄存器来进行直接的操作。
常用的几个寄存器:上面的二个寄存器是设置寄存器的是输入还是输出,输入中包括模拟输入、上拉/下拉输入、还是悬空输入。
输出包括:推挽输出、开漏输出、复用推挽输出、复用开漏输出。
这个一个在程序初始化时要做的工作,利用封装的函数还是挺好的这点要是利用寄存器操作就划不来了。
读取端口管脚就是读取ch = GPIOx->IDR; 就是这么简单。
就是把一个16位的管脚值送给这个寄存器如:GPIOx->ODR=ch,如果只改变其中一管脚原来的不变,置1时没有问题可以这样做GPIOx->ODR |=1<<n但是使某一位清0时怎么办呢?可以这样来做GPIOx->ODR &= `(1<<n); 当然还可以用另外的二个寄存器来达到目的。
用GPIOx->BRR=0x00008000方便些。
前面的0x00008000只第15脚而已。
下面贴出复位/置位寄存器和复位寄存器来不说了。
下面通过宏命令,使控制GPIO来的更加方便#define BITBAND(addr bitnum) ((addr &0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2))#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 GPIOC_IDR_Addr (GPIOC_BASE+8) //0x40011008#define GPIOD_IDR_Addr (GPIOD_BASE+8) //0x40011408#define GPIOE_IDR_Addr (GPIOE_BASE+8) //0x40011808#define GPIOF_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(GPIOC_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_ADDR(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; 或者led0=1; 像不像51中的控制。