推荐阅读最新更新时间:2024-10-31 07:57
STM32之的GPIO推挽输出与开漏输出的区别
首先看以下STM32的GPIO的原理图如下: 当端口配置为输出时: 开漏模式:输出 0 时,N-MOS 导通,P-MOS 不被激活,输出0。 输出 1 时,N-MOS 高阻, P-MOS 不被激活,输出1(需要外部上拉电路);此模式可以把端口作为双向IO使用。 推挽模式:输出 0 时,N-MOS 导通,P-MOS 高阻,输出0。 输出 1 时,N-MOS 高阻,P-MOS 导通,输出1(不需要外部上拉电路)。
[单片机]
STM32 SysTick 精确延时(非中断方式)
SysTick是Cortex-M内核自带的一个24位定时器,所以我们可以在core_cm3.h或core_cm4.h头文件中看到它的寄存器定义和配置函数SysTick_Config()。SysTick的功能非常简单,仅仅提供一个时基功能,支持中断请求,因此它的寄存器寥寥无几。 以下是手册上对SysTick寄存器的介绍: CTRL为控制寄存器: ENABLE:使能位 TICKINT: 中断的开关,当计数溢出且TICKINT=1时SysTick将发出中断申请。 CLKSOURCE:时钟选择位,CLKSOURCE=1时选择系统时钟,如果是M3则为72MHz,M4则为168MHz。否侧选择外部时钟作为时钟源。 COUNTFLAG: 溢
[单片机]
STM32下一次程序后J-link不能识别问题解决
先说下问题: 1. 我用的是STM32的HAL库, 同事用的是STM32的标准库, 每次新板子在我电脑上下完程序, 同事电脑就下不进去了. 这种情况持续了好久, 还以为是库的问题… 2. 我自己用STM32CubeMX生成的工程, 某次程序下载到MCU中后, J-link就不识别了, STM32变砖了… 变砖后点击下载会出现: 并且SW口不识别: 解决办法的分割线… 查了下, 发现是STM32CubeMX没有设置Debug口为Serial Wire, 只要忘记设置, 就极易出现变砖情况. 还好找到了两种解决办法: 第一种方法: 配置STM32CubeMX SYS- Debug为Serial Wir
[单片机]
stm32之keil开发环境搭建
本篇内含工程建立以及JLINK设置,内容借鉴了前人经验,在此感谢各位前人的贡献。 1 下载stm32F10x的官方库 http://www.st.com/web/en/catalog/tools/PF257890 2 新建工程 工程名设为stm32_demo,选择芯片型号为STM32F103B,如图, 因为下载的stm32库中有启动代码,所以这里选择 否 ,不拷贝启动代码。 在工程文件下,新建Startup 、Headers、User、Libraries、CMSIS、Lists、Output文件夹。 文件夹 用途 Startup 启动文件,Flash在16~32Kb小容量,64~128Kb中
[单片机]
STM32 JTAG/SWD禁用导致无法烧写解决方法
由于STM32的引脚功能较多,在为了方便硬件的使用,常会使用复用,重映射的功能,这里主要提及的是SWD和JTAG端口的引脚对应出现的问题。为了使得TIM2能够重映射到PA15和PB3,所以得对TIM2进行重映射,但是这样是不够的,因为下载调试端口SWD默认就占用了该引脚,所以重映射无效,因此必须先启动时钟 void Relay_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GP
[单片机]
一步步写STM32 OS【四】OS基本框架
一、上篇回顾 上一篇文章中,我们完成了两个任务使用PendSV实现了互相切换的功能,下面我们接着其思路往下做。这次我们完成OS基本框架,即实现一个非抢占式(已经调度的进程执行完成,然后根据优先级调度等待的进程)的任务调度系统,至于抢占式的,就留给大家思考了。上次代码中Task_Switch实现了两个任务的切换,代码如下: void Task_Switch() { if(g_OS_Tcb_CurP == &TCB_1) g_OS_Tcb_HighRdyP=&TCB_2; else g_OS_Tcb_HighRdyP=&TCB_1; OSCtxSw(); } 我们把要切换任务指针付给跟_OS_Tcb_HighRdyP
[单片机]
stm32函数放入段section中
关键字,__attribute__((section)). 对于这样一个需求,不管你写多少个硬件底层初始化函数,我都能通过固定的循环进行执行,是不动的一个状态,这种实现方式,可以通过以下介绍的方式操作。 思路,有两种办法,一种是指定一个段,这个段需要固定,然后,在这个段之间的区域将函数写入进去。一种是直接将函数一直写入,编译器知道写的函数有多少个,调用编译器得到的函数个数来操作,对于写的函数个数同样灵活。 第一种办法: 指定段的办法。 操作示例: 先定义一个函数类型。 typedef int (*MyFun)(void); #define INIT_FUN(fn,level)
[单片机]
模拟智能家居的环境下的家庭服务机器人系统的设计
摘要:为解决当前大部分家庭服务机器人不具备行走功能或只具有简单的避障能力等问题,本文设计一种基于STM32的家庭服务机器人系统。整个系统由轮式机器人、XBee协调器、RFID智慧地板和上位机组成。轮式机器人由主板、传感器模块、射频模块、舵机模块、电源模块和机器人金属主体组成,传感器模块包括电子罗盘、红外传感器和RFID读卡器。主板以ARM Cortex-M3内核微处理器STM32F103VCT6为核心进行开发,采集传感器模块数据信息,实现机器人与XBee协调器之间的通信连接。该系统在模拟智能家居的环境下通过自主决策稳定和高效地完成设定任务,能够满足家庭服务机器人的应用要求。 引言 随着人工智能和传感器技术的发展,机器人已从工厂
[单片机]