随笔分类 -  STM32

学习STM32的一些笔记
摘要:1、高速及全速设备的上拉电阻在D+上面,低速设备的上拉电阻在D-上面;高速模式在连接上了之后,要将D+上的上拉电阻断开。2、用于USB OTG的MINI USB接口有5条线,多了一条ID线,用于标识身份(主机还是从机)。3、低速和全速模式中,采用的是电压传输模式,高速模式下,采用的是电流传输模式。4、理论上,一个USB主控器最多可接127个设备,因为协议规定每个设备具有一个7bit的地址,0地址保留给未初始化的设备使用。5、USB是一主多从结构,USB的数据传输都是主机发起的。6、USB1.1协议定义的的标准描述符有设备描述符(Device Descriptor)、配置描述符(Configur 阅读全文
posted @ 2012-09-16 20:15 果壳中的宇宙 阅读(358) 评论(0) 推荐(0) 编辑
摘要:问题描述: 我有一个需求,AD采得一定数目的数据之后,由串口DMA发出,由于AD使用双缓冲,所以每次开始DMA的时候都需要重新设置开始的内存地址以及传输的数目(这些都是理所当然的),但是在开始调试的时候,遇到了一些问题,问题如下:当第一次DMA传输完毕,关闭DMA以设置内存地址等,再开启DMA,发现不启动了。 开始是参考了《STM32中文参考手册REV10》,里面的发送步骤如下:1. 在DMA控制寄存器上将USART_DR寄存器地址配置成DMA传输的目的地址。在每个TXE事件后,数据将被传送到这个地址。2. 在DMA控制寄存器上将存储器地址配置成DMA传输的源地址。在每个TXE事件后,将从此存 阅读全文
posted @ 2012-09-16 16:11 果壳中的宇宙 阅读(5189) 评论(0) 推荐(3) 编辑
摘要:用了不少芯片,就只有51有位操作,这个特性很喜欢,赋值简单、效率又高且节省内存,不必为了一个bool去分配一个uint8.发现stm32有Bit-Banding,就试了一下,用MDK-ARM环境下的汇编代码做了一些比较。操作,清零USART1的SR寄存器的TC位:方法一://利用USART_TypeDef这个结构寻到SR的地址,再赋值USART1->SR &= ~(1<<6);其汇编代码(-level 0)如下:用了7条指令。方法二:直接用SR的地址操作:*(__IO uint32_t *) 0x40013800 &= ~(1<<6);汇编如下:可 阅读全文
posted @ 2012-09-16 09:06 果壳中的宇宙 阅读(2519) 评论(0) 推荐(0) 编辑
摘要:这几天调试STM32,开发板上STM32的串口是通过PL2303转USB连接电脑的。STM32F103xB的datasheet上说上面的3个串口,其中一个最高可达4.5M,其他可达到2.25M。One of the USART interfaces is able to communicate at speeds of up to 4.5 Mbit/s. The other available interfaces communicate at up to 2.25 Mbit/s.但究竟是哪个能达到4.5M呢,没说;难道随便一个都可以,但只能一个达到4.5M?(2012年9月16日16:56. 阅读全文
posted @ 2012-09-14 20:24 果壳中的宇宙 阅读(4442) 评论(9) 推荐(1) 编辑
摘要:SRAM调试不用重复擦鞋flash,但是使用过程中也发现一些问题。例如时钟的设置只在第一次进入debug时是正确的,之后Reset再运行就不对了,看图:另外,关于SRAM的一个设置的解释:所以SRAM调试的时候,这两个勾不能够勾上。不明白的是,SRAM调试时,第一次DEBUG时,那个正确的时钟究竟是在什么时候设置的,我在system_stm32f10x.c设置时钟那里设置中断,但是好像没进去,没有触发中断。看来得再找找资料。 阅读全文
posted @ 2012-09-14 16:14 果壳中的宇宙 阅读(496) 评论(0) 推荐(0) 编辑
摘要:几个问题:1、状态寄存器(USART_SR)中的TC(Transmission complete)何时置位?它和TXE(Transmit data register empty,发送数据寄存器空)有何区别?可以先看看下面的图:根据上面的图,TC置位的条件就是在上一个字节发完之后,数据寄存器仍为空(TXE=1)。USART_DR中的数据,只要移位寄存器把上一字节发完,马上就可以移入移位寄存器,而USART_DR可以装入新的数据。2、波特率(Baud)的设置从手册知道,stm32的串口可以设置分数波特率,可以从APB时钟得到精确的波特率。查看标准库(v3.5)的设置波特率的部分函数,这种设置的方法 阅读全文
posted @ 2012-09-14 08:51 果壳中的宇宙 阅读(3842) 评论(0) 推荐(0) 编辑
摘要:1、DMA的中断标志需要软件手动清除,即使你启用了中断,也不会硬件清除的,可以:DMA_ClearITPendingBit(DMA_IT_HT);//清楚传输过半中断标志DMA_ClearITPendingBit(DMA_IT_TC);2、觉得的这个传输过半中断很好用,可实现类似双缓存功能,即把内存区设置为要传输的字节数(例如串口传输)的两倍,DMA填满一半了,启用(串口)传输,DMA完成了,再传DMA内存区的后一半。 阅读全文
posted @ 2012-09-13 16:58 果壳中的宇宙 阅读(864) 评论(2) 推荐(1) 编辑
摘要:由于要采集电压、电流以计算功率、阻抗等信息,STM32的同步规则模式很适合于这种情景。使用时有几点需要注意的:1、选择正确的模式:ADC_Mode_RegSimult,即DUALMOD[3:0] = 0110,ADC2在双模式中,这些位为保留位2、开启ADC的DMA,在双ADC模式里,为了在主数据寄存器上读取从转换数据,必须使能DMA位,即使不使用DMA传输规则通道数据。只有ADC1和ADC3能产生DMA请求。所以只需设置ADC1的DMA:ADC_DMACmd(ADC1, ENABLE);3、ADC2的转换数据存在ADC1_DR的高半字;4、不要在2个ADC上转换相同的通道((两个ADC在同. 阅读全文
posted @ 2012-09-13 16:12 果壳中的宇宙 阅读(6803) 评论(1) 推荐(0) 编辑
摘要:;******************** (C) COPYRIGHT 2010 STMicroelectronics ********************;* File Name : startup_stm32f10x_hd.s;* Author : MCD Application Team;* Version : V3.4.0;* Date : 10/15/2010;* Description : STM32F10x High Density Devices vector tabl... 阅读全文
posted @ 2012-09-12 21:07 果壳中的宇宙 阅读(1775) 评论(1) 推荐(0) 编辑
摘要:要使用STM32,需要各种文档,其中有(以STM32F103RBT6为例):st官方资源地址:http://www.st.com/internet/mcu/product/164487.jsp1、datasheet:http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/DATASHEET/CD00161566.pdf2、REFERENCE MANUALS:http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/REFE 阅读全文
posted @ 2012-09-12 20:53 果壳中的宇宙 阅读(17234) 评论(7) 推荐(3) 编辑
摘要:据说Flash的擦写次数是有限的,所以在调试的时候擦来擦去不好,看到boot0、boot1可以配置从SRam启动,就查了相关资料,试了一下,ok了。记录一下,免得以后又忘了。跟flash调试部分相同的就不再描述了,重点在于SRam调试的设置部分,大部分以图片形式。Dbg_RAM.ini(D:\Keil\ARM\Boards\Keil\MCBSTM32\Blinky下面有一个,其实MCBSTM32目录下的都一样的,只要有)的内容:/*---------------------------------------------------------------------------- * Na. 阅读全文
posted @ 2012-09-11 21:41 果壳中的宇宙 阅读(6018) 评论(1) 推荐(0) 编辑
摘要:试着申请首页,看看这类内容在blogcn的关注程度,呵呵system_stm32f10x.cSystemInit():在"startup_stm32f10x_xx.s"文件中被调用,功能是设置系统时钟(包括时钟源,PLL系数,AHB/APBx的预分频系数还有flash的设定),这个函数会在系统复位之后首先被执行。默认的一些设置:允许HSE(外部时钟),FLASH(允许预取缓冲区,设置2个等待周期),PLL系数为9,开启PLL并选择PLL输出作为时钟源(SYSCLK),后续设置SYSCLK = HCLK = APB2 = 72MHz,APB1 = HCLK/2 = 36MHz 阅读全文
posted @ 2012-09-08 21:14 果壳中的宇宙 阅读(2715) 评论(1) 推荐(0) 编辑
摘要:在项目中使用stm32标准外设库(STM32F10x Standard Peripherals Library)的时候,我们会在项目的选项中预定义两个宏定义:USE_STDPERIPH_DRIVER, STM32F10X_MD,如下图:这两个的作用是什么呢?1、 USE_STDPERIPH_DRIVER : to use or not the peripheral’s drivers in application code (i.e. code will be based on direct access to peripheral’s registers rather than drive. 阅读全文
posted @ 2012-09-06 12:04 果壳中的宇宙 阅读(13909) 评论(1) 推荐(0) 编辑
摘要:USB转串口,系统自动分配的串口号分配到很后面。而一些串口软件设计得又不人性化,例如“串口调试助手”只能用com1~com4,后面的都用不到,想到设备管理器里面手动把usb转串口的com号改前面一点,都提示占用;但是com1~com4明明都没有串口设备。 应该是以前连接过,之后被系统记录下来了。解决的办法: 进入注册表(regedit.exe),浏览到下面键值:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter把 ComDB 键删了,就行了,系统会根据实际情况,重新生成这个键的。现在usb转串口可以选择co. 阅读全文
posted @ 2012-09-05 18:03 果壳中的宇宙 阅读(9400) 评论(0) 推荐(0) 编辑
摘要:几个要点:1、CMSIS(ARM®Cortex™微控制器软件接口标准,Cortex™ microcontroller software interface standard)是ARM公司主持制订的一个标准,是Cortex-M 处理器系列的与供应商无关的硬件抽象层。使用 CMSIS,可以为处理器和外设实现一致且简单的软件接口,从而简化软件的重用、缩短微控制器新开发人员的学习过程,并缩短新设备的上市时间。 2、ST的STM32的库从3.0开始兼容SMSIS,名字也变为STM32F10xxx standard peripheral library(STM32F10xxx标准外设库)。之前的 阅读全文
posted @ 2012-09-05 09:20 果壳中的宇宙 阅读(1118) 评论(1) 推荐(0) 编辑