STM32
qutiezhu
这个作者很懒,什么都没留下…
展开
-
MDK中debug模式下“外设菜单”下只有一个选项的问题
最近在做stm32的project是发现在debug mode下,peripherals菜单下只有一个选项:core peripheral,但是先前看过的例程在这个菜单下面都会有有许多外设的对话框,例如GPIO,usb,timer,systick以及sys clock。这些对话框可以直截了当的观察和设定系统参数,使用起来比较方便。新的工程是使用 keil MDK4.5生成的,所以没有这些菜单选原创 2013-01-27 20:59:37 · 2101 阅读 · 0 评论 -
Uip WebServer 实现
Uip的Webserver比较复杂,用c语言实现一个简单服务器的所有功能,路由功能,GET传参,动态页面生成等。 要运行Uip的WebServer 只需要:1. 修改uip-con.h 里的#inlcude "webserver.h" 去除其注释2. 在User/main.c 里加入 httpd_init(); //初始化服务器 Uip+ stm32移植参见转载 2016-08-30 21:34:45 · 1904 阅读 · 0 评论 -
Uip + Stm32移植问题总结
uIP 由瑞典计算机科学学院(网络嵌入式系统小组)的Adam Dunkels (http://dunkels.com/adam/uip/)开发。其源代码由C 语言编写,并完全公开,有了这个TCP/IP协议栈,让嵌入式可以实现的功能更为丰富。可以作为WebClient 向指定网站提交数据,可以作为WebServer作为网页服务器,提供一个小型的动态页面访问功能。由于是开源的免费协议栈,据说Uip没有转载 2016-08-30 21:31:59 · 2386 阅读 · 0 评论 -
stm32 can总线通信[库函数]
CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由研发和生产汽车电子产品著称的德国BOSCH公司开发了的,并最终成为国际标准(ISO118?8)。近年来,其所具有的高可靠性和良好的错误检测能力受到重视,被广泛应用于汽车计算机控制系统和环境温度恶劣、电磁辐射强和振动大的工业环境。相比于I2C和SPI总线结构,can总线定义了更为优秀的物理层、数据链路层,并转载 2016-08-30 21:30:11 · 6712 阅读 · 0 评论 -
stm32 i2c通信 [操作寄存器+库函数]
I2C总线是由NXP(原PHILIPS)公司设计,有十分简洁的物理层定义,其特性如下:只要求两条总线线路:一条串行数据线SDA,一条串行时钟线SCL;每个连接到总线的器件都可以通过唯一的地址和一直存在的简单的主机/从机关系软件设定地址,主机可以作为主机发送器或主机接收器;它是一个真正的多主机总线,如果两个或更多主机同时初始化,数据传输可以通过冲突检测和仲裁防止数据被破坏;转载 2016-08-30 21:29:24 · 8881 阅读 · 1 评论 -
stm32 DMA数据搬运 [操作寄存器+库函数]
DMA(Direct Memory Access)常译为“存储器直接存取”。早在Intel的8086平台上就有了DMA应用了。 一个完整的微控制器通常由CPU、存储器和外设等组件构成。这些组件一般在结构和功能上都是独立的,而各个组件的协调和交互就由CPU完成。如此一来,CPU作为整个芯片的核心,其处理的工作量是很大的。如果CPU先从A外设拿到一个数据送给B外设使用,同时C外转载 2016-08-30 21:28:35 · 1578 阅读 · 0 评论 -
stm32 BKP寄存器操作[操作寄存器+库函数]
BKP是“BACKUP”的缩写,stm32f103RCTE的内部配备了10个16位宽度的BKP寄存器。在主电源切断或系统产生复位时间时,BKP寄存器仍然可以在备用电源的支持下保持其内容。 BKP在实际应用中可以存入重要数据,防止被恶意查看,或用于断电回复等。 本例实现对BKP寄存器的读写操作,和入侵检测和处理。主程序中写入寄存器后,依次打印出10个BKP寄存器数据,然后触发GPIOC1转载 2016-08-30 21:25:38 · 3438 阅读 · 0 评论 -
stm32 低功耗设计[操作寄存器+库函数]
stm32的低功耗模式有三种: 睡眠模式(内核停止,外设运行)停机模式(所有时钟都停止)待机模式(1.8V内核电源也关闭) 在这三种模式中,最低功耗的是待机模式,在此模式下,最低只需要2uA左右的电流。整个1.8V供电区被断电,PLL、HSI、HSE振荡器都被关闭。SRAM和寄存器内容丢失。停机模式是次低功耗的的,其典型的电流损耗在20uA左右。最后就是睡眠模式。转载 2016-08-30 21:24:29 · 682 阅读 · 0 评论 -
stm32 TIM定时器 PWM脉冲输出[操作寄存器+库函数]
脉冲调制(PWM)是利用微处理器对数字输出来对模拟电路的一种非常有效的技术。简单点说就是对确定频率的信号,调整其占空比。 stm32的定时器除了TIM6和TIM7外,其他定时器都可以产生PWM输出。其中高级定时器TIM1和TIM8可以产生多达7路的PWM输出。通用定时器可以产生4路的PWM输出。 在stm32 TIM定时器[操作寄存器+库函数] 中我们是通过在中断中,翻转指定引脚转载 2016-08-30 21:20:27 · 7494 阅读 · 0 评论 -
stm32 TIM定时器[操作寄存器+库函数]
stm32配备了2个高级定时器TIM1和TIM8,4个通用定时器 TIM2,TIM3,TIM4和TIM5,还有两个基本定时器TIM6和TIM7。 高级定时器常用于电机控制,因为其加入了死区控制,紧急制动,定时器同步等高级特性。基本定时器可以为数模转化器提供准确的时间基准。 stm32的通用定时器由一个通过可编程预分频器驱动的16位自动装载计数器构成。通用定时器可以用于测量输入信号的脉冲长度转载 2016-08-30 21:19:25 · 8552 阅读 · 0 评论 -
stm32 外部中断嵌套[操作寄存器+库函数]
stm32共有19个外部中断: 线0~15:对应外部I/O口的输入中断线16:连接到PVD输出。PVD(Programmable Votage Detector),即可编程电压监测器。作用是监视供电电压,在供电电压下降到给定的阀值以下时,产生一个中断,通知软件做紧急处理。当供电电压又恢复到给定的阀值以上时,也会产生一个中断,通知软件供电恢复。线17:连接到RTC实时时钟产生转载 2016-08-30 21:18:22 · 1144 阅读 · 0 评论 -
stm32 USART 串口通信[操作寄存器+库函数]
串口通信虽然在如今的电脑上使用的越来越少,因为其在通信速率,距离已经不适应pc的要求,取而代之的是USB口。但是在嵌入式领域,USART仍然广泛运用着。 stm32的最多可以提供5路串口,有分数波特率发生器、支持同步单线通信和半双工单线通信、具有DMA等。使用USART时,stm32的I/O口经RS232电平转换电路 和电脑的串口连接。 串口使用只需要开始串口时钟,设置相应的I转载 2016-08-30 21:17:15 · 2391 阅读 · 1 评论 -
stm32的按键扫描[操作寄存器+库函数]
本例将实现stm32的按键扫描功能。 操作寄存器 stm32的I/O口作为输入使用时,是通过读取GPIOx -> IDR 寄存器的内容来读取I/O口状态的。 IDR寄存器各位描述如下: 由于systick不能像库函数那样方便的产生中断,通过查询systick状态位后,再查询各管脚状态反而更为不方便,所以和库函数方法不一样,直接查询了管脚状态来检测按键。转载 2016-08-30 21:15:47 · 5205 阅读 · 0 评论 -
stm32点个灯[操作寄存器+库函数]
stm32的使用和51单片机不同,单片机接上晶振接上电源 直接就可以操作io口,但是stm32的时钟是经过了倍频器放大频率的,然后再由锁相环输出稳定的时钟频率。这么做的带来了很多好处,虽然stm32的外部时钟只有8Mhz ,经过倍频器后就可以得到好几种的时钟频率 给不同的外设提供不同的时钟频率。所以stm32有很多总线,这些总线的频率是不同的,而且在使用前总线是关闭的,使用外设前必须打转载 2016-08-30 21:12:43 · 2544 阅读 · 0 评论 -
stm32 开发环境MDK+库文件配置
stm32 是一款arm cortex-m3 架构的芯片 结合库函数使用 可以更方便的实现各种功能 尤其是结合各种总线开发应用时 因为库函数已经封装很多总线的处理方法和驱动 直接调用对应库函数 就可以操作各个总线 相比于 直接操作寄存器来说 操作I2C SPI CAN 等总线结构 会简单很多stm32 的开发工具有很多MDK ADS AVR 等 我用的是MDk 其实就是可以编译arm的keil转载 2016-08-30 21:10:59 · 5610 阅读 · 0 评论 -
stm32 Fatfs 读写SD卡
读写SD是嵌入式系统中一个比较基础的功能,在很多应用中都可以用得上SD卡。折腾了几天,总算移植成功了 最新版Fatfs(Fatfs R0.09) ,成功读写SD卡下文件。 FatFs (http://elm-chan.org/fsw/ff/00index_e.html)是一个通用的文件系统模块,用于在小型嵌入式系统中实现FAT文件系统。 FatFs 的编写遵循AN转载 2016-08-30 21:35:33 · 22623 阅读 · 3 评论 -
stm32 驱动 触摸屏
由于智能手机的发展和大屏幕的兴起,触摸屏已经得到了广泛的应用。触摸屏分为两种:电阻触屏 俗称“软屏”;电容触屏俗称“硬屏”。 电阻触摸屏的屏体部分是一块多层复合薄膜,由一层玻璃或有机玻璃作为基层,表面涂有一层透明的阻性材料组成的导电层(ITO膜),上面再盖有一层外表面经过硬化处理、光滑防刮的塑料层。它的内表面也涂有一层ITO,在两层导电层之间有许多细小(小于千分之一英寸)的透明转载 2016-08-30 21:36:28 · 6392 阅读 · 0 评论 -
stm32 DA 数模转换
stm32并不是所有的型号都有DAC功能,只有stm32f103xC/D/E系列 才有DAC转换功能。由于库函数手册中没有相关说明,所以只能通过在MDK提供的相关库文件 stm32f10x_dac.c 中找到相应的DAC函数,做了一番尝试。 折腾了一天,实现了DAC的转换和三角波的输出。我使用的是 stm32rct6的芯片,有两个DAC通道,在PA4和PA5两个引脚上。转载 2016-08-30 21:37:44 · 13500 阅读 · 3 评论 -
用MDK生成bin文件的步骤及方法
1用MDK 生成bin 文件Embest 徐良平在RV MDK 中,默认情况下生成*.hex 的可执行文件,但是当我们要生成*.bin 的可执行文件时怎么办呢?答案是可以使用RVCT 的fromelf.exe 工具进行转换。也就是说首先将源文件编译链接成*.axf 的文件,然后使用fromelf.exe 工具将*.axf 格式的文件转换成*.bin格式的文件。下面将具体转载 2013-01-27 20:45:14 · 878 阅读 · 0 评论 -
STM32 SD bootloader实现
前几天在网上看到了一个sd bootloader,但是下载需要积分。于是想着自己写个简单的sd卡的bootloader,实际上就是stm32的iap功能了。简单介绍一下stm32的iap吧,以下内容摘抄自网络。IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过原创 2013-01-27 19:28:24 · 4050 阅读 · 0 评论 -
stm32那点事-时钟
在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 其实是四个时钟源,如下图所示(灰蓝色),PLL是由锁相环电路倍频得到PLL时钟。 ①、HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 ③、LSI是低速内部时钟,RC振荡器,频率为40kHz。 ④、L转载 2013-03-03 20:45:59 · 390 阅读 · 0 评论 -
stm32上最方便的定时器Systick[操作寄存器+库函数]
Systick 是stm32上一个用处很多的内设,所有基于arm-cortex m3 的芯片都有这个定时器,所以考虑到平台的可移植性时,可以多使用Systick。 Systick 是一个24位数据宽度的倒计数定时器,其计数范围只能到 1677215(2^24),当计数到0时会从RELOAD寄存器 中自动重装定时初值。只要不把SysTick的控制及状态寄存器中的使能位清除,计数器就不会停止。转载 2016-08-30 21:13:57 · 4002 阅读 · 0 评论 -
stm32 独立看门狗[操作寄存器+库函数]
以单片机为核心的微型计算机系统中,单片机经常会受到来自外界电磁场的干扰。造成程序跑飞,只是程序的正常运行状态被打断而进入死循环,从而使单片机控制的系统无法正常工作。看门狗就是一种专门用于检测单片机程序运行状态的硬件结构。 stm32也是如此。 stm32 的独立看门狗由内部专门的40Khz低速时钟驱动,即使主时钟发生故障时,它也仍然有效。这里需要注意的是独立看门狗的时钟是一个内转载 2016-08-30 21:21:14 · 2453 阅读 · 0 评论 -
stm32 窗口看门狗[操作寄存器+库函数]
stm32有两个看门狗,独立看门狗和窗口看门狗,其实两者的功能是类似的,只是喂狗的限制时间不同。独立看门狗是限制喂狗时间在0-x内,x由你的相关寄存器决定。喂狗的时间不能过晚。窗口看门狗,所以称之为窗口就是因为其喂狗时间是一个有上下限的范围内,你可以通过设定相关寄存器,设定其上限时间和下限时间。喂狗的时间不能过早也不能过晚。窗口看门狗的上窗口就是配置寄存器WWDG->CFR里设转载 2016-08-30 21:22:12 · 786 阅读 · 0 评论 -
stm32 AD模数转换[操作寄存器+库函数]
stm32f103最少有2个AD模数转换器,每个ADC都有18个通道,可以测量16个外部和2个内部模拟量。最大转换频率为1Mhz,也就是转换时间为1us(在 ADCCLK = 14Mhz,采样周期为1.5个时钟周期时)。最大时钟超过14Mhz,将导致ADC转换准确度降低。stm32的ADC是12位精度的。 stm32的ADC转换有两种通道,规则通道和注入通道,注入通道可以抢占式地打断规则通转载 2016-08-30 21:23:17 · 5634 阅读 · 0 评论 -
stm32 RTC实时时钟[操作寄存器+库函数]
"RTC"是Real Time Clock 的简称,意为实时时钟。stm32提供了一个秒中断源和一个闹钟中断源。 RTC的技术器是一个32位的计数器,使用32.768khz的外部晶振。 2038年问题 在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作。所有使用UNIX时间表示时间的程序都将受其影响,因为它们以自1970年1月1日经过的秒数(转载 2016-08-30 21:26:30 · 8236 阅读 · 1 评论 -
stm32 Flash读写[库函数]
通过对stm32内部的flash的读写可以实现对stm32的编程操作。 stm32 的内置可编程Flash在许多场合具有十分重要的意义。如其支持ICP特性使得开发人员对stm32可以警醒调试开发,可以通过JTAG和SWD接口对stm32进行程序烧写;支持IAP特性使得开发人员可以在stm32运行程序的时候对其内部程序进行更新操作。对一些对数据安全有要求的场合,可编程FLAS转载 2016-08-30 21:27:32 · 866 阅读 · 0 评论 -
Uip WebClient 实现
Uip WebClient 实现的功能是接入互联网,通过http协议访问某个网站。HTTP是一种应用层协议。基于TCP/IP。 TCP/IP作为传输层协议解决数据如何在网络中传输,HTTP作为应用层协议,解决如何包装数据。默认的HTTP访问端口为80端口。 Uip + stm32 的移植参见 Uip + Stm32移植问题总结 相关文件:Apps/resolv.c 文件实现转载 2016-08-30 21:33:41 · 1191 阅读 · 0 评论 -
stm32 printf的实现
嵌入式系统开发中,常常使用串口将重要的数据或者字符信息打印到PC,为系统的调试带来了很大的便利。本文简单介绍一下printf在stm32上的实现,当然也不仅限于stm32,只要把串口发送函数稍加改动就可以移植其他任何微控制器环境上。提到printf,首先简单介绍一下可变参数的实现va函数:va_list arg_ptr;void va_start( va_list arg_pt原创 2016-08-30 22:01:17 · 3164 阅读 · 0 评论 -
stm32 PVD 可编程电压监测器
PVD (Programmable Votage Detector) ,即可编程电压监测器 。stm32库函数手册中没有细讲这个模块,只是在 PWM一章中列出了两个相关函数。但是这个功能在实际项目中会有较大的作用,当电压过低时,对系统的一些数据使用掉电不丢失的 EEPROM 或 Flash 保存起来,同时对外设进行相应的保护操作。 PVD的作用是监视供电电压,在供电电压下降到转载 2016-08-30 21:39:42 · 7115 阅读 · 4 评论 -
stm32 SWD 下载 调试配置
找到一篇比较好的 关于stm32 SWD模式 下载 调试 配置文章 整理如下: 我们比较常用的是Jlink下载器 ,这种下载器有一个缺点就是使用的Jtag 20PIN接口,太多的PIN会导致一些小型的PCB板很拥挤,也会增加布线的难度。 而使用SWD接口下载调试,只需要要使用4个PIN: GND, RST, SWDIO, SWDCLK ,而且下载速度可以达到10M/s,优势显而转载 2016-08-30 21:39:02 · 2936 阅读 · 1 评论 -
stm32 UCGUI 完美移植
UCGUI是一种嵌入式应用中的图形支持系统。它设计用于为任何使用LCD图形显示的应用提供高效的独立于处理器及LCD控制器的图形用户接口,它适用单任务或是多任务系统环境, 并适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示。 它的设计架构是模块化的,由不同的模块中的不同层组成,由一个LCD驱动层来包含所有对LCD的具体图形操作。UCGUI可以在任何的CPU上运行,转载 2016-08-30 21:38:17 · 17049 阅读 · 2 评论 -
stm32 NVIC中断管理实现[直接操作寄存器]
cortex-m3支持256个中端,其中包含了16个内核中断,240个外部中断。stm32只有84个中断,包括16个内核中断和68个可屏蔽中断。stm32f103上只有60个中断,f107上才有68个中断。 中断是stm32很基础的一个功能,学会使用中断,才可以更好的使用其他的外设。理解stm32的中断,必须要先从stm32的中断优先级分组是怎么回事。要理解优先级分组,就要先理解什转载 2016-08-31 22:21:04 · 4300 阅读 · 0 评论