stm32

STM32 SysTick定时器应用【worldsing笔记】

无人久伴 提交于 2019-12-31 19:58:32
SysTick是CM内核独立的定时器,时钟可以用内核内部的,也可以用芯片厂家(ST)的时钟,参考《Cortex-M3权威指南》的第13章: 另外也可以考《STM32F10xxx Cortex-M3 programming manual.pdf》第4章CM3系统外设,从手册来看,ST应该只提供了内核外部时钟,而外部时钟又分成两种:HCLK/8 和 HCLK, ST官方提供了库直接可以操作SYSTICK,但不同的版本使用起来有些区别: 在V2.0的版本中对SysTick的操作是使用的stm32f10x_systick.c和stm32f10x_systick.h void SysTick_CLKSourceConfig(u32 SysTick_CLKSource); void SysTick_SetReload(u32 Reload); void SysTick_CounterCmd(u32 SysTick_Counter); void SysTick_ITConfig(FunctionalState NewState); u32 SysTick_GetCounter(void); FlagStatus SysTick_GetFlagStatus(u8 SysTick_FLAG); 但是在V3.0中取消了stm32f10x_systick.c和stm32f10x_systick

stm32 堆和栈(stm32 Heap & Stack)【worldsing笔记】

ⅰ亾dé卋堺 提交于 2019-12-31 19:58:09
关于堆和栈已经是程序员的一个月经话题,大部分有是基于os层来聊的。 那么,在赤裸裸的单片机下的堆和栈是什么样的分布呢?以下是网摘: 刚接手STM32时,你只编写一个 int main() { while(1); } BUILD://Program Size: Code=340 RO-data=252 RW-data=0 ZI-data=1632 编译后,就会发现这么个程序已用了1600多的RAM,要是在51单片机上,会心疼死了,这1600多的RAM跑哪儿去了, 分析map,你会发现是堆和栈占用的,在startup_stm32f10x_md.s文件中,它的前面几行就有以上定义, 这下该明白了吧。 Stack_Size EQU 0x00000400 Heap_Size EQU 0x00000200 以下引用网上资料 理解堆和栈的区别 (1)栈区(stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等,其操作方式类似 于数据结构中的栈。 (2)堆区(heap):一般由程序员分配和释放,若程序员不释放,程序结束时可能由操作系统回收。分配 方式类似于数据结构中的链表。 (3)全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态 变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系 统自动释放。 (4

Keil uCos 2.52 stm32 【worldsing笔记】

五迷三道 提交于 2019-12-31 19:57:55
1、uCOSii V2.52 a、加了7个可以配置的钩子函数宏 #define OS_TASK_CREATE_HOOK_EN 0 /* 任务创建时调用钩子函数 使能 1 / 禁止 0 */ #define OS_TASK_STAT_HOOK_EN 0 /* 统计任务运行时调用钩子函数 使能 1 / 禁止 0 */ #define OS_TASK_SW_HOOK_EN 1 /* 任务调度时调用钩子函数 使能 1 / 禁止 0 */ #define OS_TIME_TICK_HOOK_EN 1 /* 滴答中断时调用钩子函数 使能 1 / 禁止 0 */ #define OS_TCB_INIT_HOOK_EN 0 /* TCB初始化时调用钩子函数 使能 1 / 禁止 0 */ #define OS_TASK_IDLE_HOOK_EN 0 /* 统计任务运行时调用钩子函数 使能 1 / 禁止 0 */ #define OS_INIT_BEGIN_HOOK_EN 0 /* OS初始化开始时调用钩子函数 使能 1 / 禁止 0 */ #define OS_INIT_END_HOOK_EN 0 /* OS初始化结束时调用钩子函数 使能 1 / 禁止 0 */ b、加了创建任务是自动分配栈接口OSSetupTask和宏,也可以用原生的OSTaskCreate(),OSSetupTask(任务名,

74HC595 for STM32 源代码【worldsing笔记】

*爱你&永不变心* 提交于 2019-12-31 19:57:34
74HC595是硅结构的CMOS器件, 兼容低电压TTL电路,遵守 JEDEC 标准。 74HC595是具有8位 移位寄存器 和一个 存储器 ,三态输出功能。 移位寄存器和 存储器 是分别的时钟。 数据在SHcp(移位寄存器时钟输入)的上升沿输入到 移位寄存器 中,在STcp(存储器时钟输入)的上升沿输入到存储寄存器中去。如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。 移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。 8位串行输入/输出或者并行输出移位寄存器,具有高阻关断状态。三态。 将串行输入的8位数字,转变为并行输出的8位数字,例如控制一个8位数码管,将不会有闪烁。 特点 8位串行输入 /8位串行或并行输出 存储状态寄存器,三种状态 输出寄存器(三态输出:就是具有高电平、低电平和高阻抗三种输出状态的门电路。)可以直接清除 100MHz的移位频率 输出能力 并行输出,总线驱动; 串行输出;标准中等规模集成电路 595移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。 参考数据

STM32中GPIO_Mode--GPIO配置

落花浮王杯 提交于 2019-12-31 19:27:18
本篇由转载而来,有侵权请联系作者,谢谢。 原博客地址:https://blog.csdn.net/snow416/article/details/6540646 一、GPIO配置 (1)GPIO_Mode_AIN 模拟输入 (2)GPIO_Mode_IN_FLOATING 浮空输入 (3)GPIO_Mode_IPD 下拉输入 (4)GPIO_Mode_IPU 上拉输入 (5)GPIO_Mode_Out_OD 开漏输出 (6)GPIO_Mode_Out_PP 推挽输出 (7)GPIO_Mode_AF_OD 复用开漏输出 (8)GPIO_Mode_AF_PP 复用推挽输出 GPIO_Speed_10MHz 最高输出速率10MHz GPIO_Speed_2MHz 最高输出速率2MHz GPIO_Speed_50MHz 最高输出速率50MHz 1.1 I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口 的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声 控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路

Using the ODR register directly On STM32

£可爱£侵袭症+ 提交于 2019-12-31 07:45:12
问题 Modify the code for WriteLED() to use the ODR register directly. The code should read the current value of the register and then write back a modified value depending on what LEDs are to be turns on or off. Example Code Given to me void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin) { /* Check the parameters */ assert_param(IS_GPIO_PIN(GPIO_Pin)); GPIOx->ODR ˆ= GPIO_Pin; } Code That Needs to be Altered WriteLED (uint8_t LED, uint8_t State) { // Check for correct state if ((State !

Why do STM32 gcc linker scripts automatically discard all input sections from these standard libraries: libc.a, libm.a, libgcc.a?

ⅰ亾dé卋堺 提交于 2019-12-30 06:50:13
问题 From the bottom of any auto-generated STM32CubeMx-generated linker script: /* Remove information from the standard libraries */ /DISCARD/ : { libc.a ( * ) libm.a ( * ) libgcc.a ( * ) } From the GNU Binutils ld (linker script) manual, 3.6.7 Output Section Discarding: The special output section name ‘/DISCARD/’ may be used to discard input sections. Any input sections which are assigned to an output section named ‘/DISCARD/’ are not included in the output file. What do these 3 input object

STM32F103C8/BT6最小系统原理图、PCB

Deadly 提交于 2019-12-30 04:49:19
STM32F103C8T6是一款基于ARM Cortex-M 内核 STM32 系列的32位的微控制器,程序存储器容量是64KB(STM32F103CBT6存储器容量128KB),需要电压2V~3.6V,工作温度为-40°C ~ 85°C。 具体指标如下: 将 STM32F103C8T6(STM32F103X8和STM32F103XB的最小系统一致,不过是闪存不同,具体差异参见: STM32选型 )最小系统原理图、PCB开源给小伙伴,效果如下所示: 关注公众号,回复关键字: STM32F103C8T6最小系统 ,获取资源。 来源: CSDN 作者: 不脱发的程序猿 链接: https://blog.csdn.net/m0_38106923/article/details/103747064

Stm32 学习笔记(2)Eclipse 开发环境搭建

早过忘川 提交于 2019-12-30 01:22:26
开发 Stm32 的标准环境应该是 MDK Keil,但是这玩意儿也有短板,一是商业软件、二是代码编辑功能不强(比记事本强点),所以,GCC撸起来。方案有两个,一是 VsCode + PlatformIo IDE,二是Eclipse + plugins。从发展来看大概、可能、应该是 VsCode 胜出,但试了一下,目前可用性还比较差,也可能是因为我对 Eclipse 更加熟悉, 配置一下,多数情况都能跑起来。so, 最终选择 Eclipse,并且 Eclipse 的代码编辑功能是挺强大的。 开源环境最大的问题为不是开箱即用,需要分别准备如下材料: 相关软件 Eclipse CDT 下载地址: https://www.eclipse.org/cdt/downloads.php The GNU MCU Eclipse plug-ins 原 GNU ARM Eclipse Plugins 下载地址: https://github.com/gnu-mcu-eclipse/eclipse-plugins/releases GNU Arm Embedded Toolchain 主页: https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain 来源: CSDN

STM32 USB转串口驱动安装不成功出现黄色感叹号解决方法!

℡╲_俬逩灬. 提交于 2019-12-29 11:28:31
相信很多人在做USB转串口时出现过串口驱动安装不成功,出现黄色感叹号问题, 出现这种问题一般是驱动安装不成功造成的。    这里我就这个问题总结几个简单的方法。 方法1:    插上USB,利用驱动人生安装驱动。 方法2:    先插上USB,去到设备管理器,把驱动卸载,       然后再把USB拔掉,再插上,让电脑自动重新安装驱动,反复几次就可以了。 方法3:    有一种可能是STM32CubeMX分配的堆空间太小造成的,这里改变其大小即可 ,如下:       方法4:    还有一种原因是STM32F407的VBUS检测功能默认是开启,把该功能关闭即可 。    以上就是我遇到过几种USB转串口驱动安装不成功的原因以及解决方法啦,黄色感叹号不见了!    来源: https://www.cnblogs.com/xingboy/p/9547918.html