STM32
九方缘
有梦就去追,为理想而活着!
展开
-
STM32启动文件详解及SystemInit函数分析
1 ;先在RAM中分配系统使用的栈,RAM的起始地址为0x2000_00002 ;然后在RAM中分配变量使用的堆3 ;然后在CODE区(flash)分配中断向量表,flash的起始地址为0x0800_0000,该中断向量表就从这个起始地址开始分配4 ;分配完成后,再定义和实现相应的中断函数,5 ;所有的中断函数全部带有[weak]特性,即弱定义,如果编译器发现在别处文件中定义了同名函数,在...转载 2019-01-23 11:46:03 · 503 阅读 · 0 评论 -
DIY 解析STM32启动过程
相对于ARM上一代的主流ARM7/ARM9内核架构,新一代Cortex内核架构的启动方式有了比较大的变化。ARM7/ARM9内核的控制器在复位后,CPU会从存储空间的绝对地址0x000000取出第一条指令执行复位中断服务程序的方式启动,即固定了复位后的起始地址为0x000000(PC = 0x000000)同时中断向量表的位置并不是固定的。而Cortex-M3内核则正好相反,有3种情况:1、 通...转载 2019-01-23 11:44:24 · 174 阅读 · 0 评论 -
针对mdk中STM32程序无法使用printf,产生停留BEAB BKPT 0xAB处问题的解决
在网上搜了下,发现有很多这样的问题,我也遇到了,最后解决了,我在此总结一下:问题1(与编译软件无关):在程序中加入printf语句实现串口输出,但未写重定向函数fputc,出现编译无任何警号和错误直接下载无法运行,软件仿真可以运行至MAIN函数,硬件仿真在汇编窗口看到停留在“0x0800XXXX BEAB BKPT 0xAB //进入调试模式”处无法继续运行。解决办法:编写fputc函数如下:...转载 2019-01-23 11:42:46 · 1302 阅读 · 1 评论 -
STM32菜鸟成长记录---普通定时器应用
一、STM32通用定时器原理STM32 系列的CPU,有多达8个定时器,其中TIM1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生。其它6个为普通定时器,时钟由APB1的输出产生。下图是STM32参考手册上时钟分配图中,有关定时器时钟部分的截图:从图中可以看出,定时器的时钟不是直接来自APB1或APB2,而是来自于输入为APB1或A...转载 2019-01-25 09:27:54 · 235 阅读 · 0 评论 -
基于STM32的USB枚举过程学习笔记(二)
接下来介绍USB设备的枚举,枚举就是从设备读取各种描述符信息,这样主机就可以根据这些信息来加载合适的驱动,从而知道是什么样的设备,如何进行通信。 枚举过程使用的是控制传输。控制传输可以保证数据的正确性。控制传输分三个过程:建立过程,可选数据过程及状态过程。下面介绍枚举的详细过程。USB主机检测到USB设备插入后,就会先对设备复位,并通过一个带数据过程的控制传输完成设备描述符的获取。第一步,U...转载 2019-01-25 09:23:34 · 223 阅读 · 0 评论 -
基于STM32的USB枚举过程学习笔记(三)
上一篇介绍到了主机上电复位USB设备,在控制传输的建立过程,发送了8个字节的数据给设备,这8个字节为0x80 0x06 0x00 0x01 0x00 0x00 0x40 0x00,该请求为USB标准设备请求中的GET_DESCRIPTOR请求。0x80表示标准设备请求,数据方向是设备到主机。0x60表示请求类型GET_DESCRIPTOR。0x01表示描述符类型是设备描述符。0x40表示描述符长度...转载 2019-01-25 09:22:47 · 327 阅读 · 0 评论 -
基于STM32的USB枚举过程学习笔记(四)
接下来,主机将使用新的设备地址和设备进行通信。 主机需要再次获取设备描述符,配置描述符,字符串描述符,另外HID设备还要获取报告描述符等。根据《圈圈教你玩USB》里面介绍,我们可以使用BUS Hound工具,对主机发送给设备的数据进行抓包,分析数据包,根据USB协议完成相应的主机的请求。在STM32 USB_HID的例子中,和以上获取描述符相关的主要文件有Usb_desc.c(定义了各种描述符)...转载 2019-01-25 09:21:08 · 226 阅读 · 0 评论