推荐阅读最新更新时间:2024-03-16 16:19
STM32 USB学习笔记6
主机环境:Windows 7 SP1 开发环境:MDK5.14 目标板:STM32F103C8T6 开发库:STM32F1Cube库和STM32_USB_Device_Library 现在来分析哈USB器件库代码,先来看usbd_core文件,其头文件只有一些函数声明,没啥可说的,只有一点,之前分析usbd_conf.c文件时里面USB中断回调函数中调用的底层接口都是在usbd_core.h文件中声明的,同样由用户实现的底层接口也是在该文件中声明的,在usbd_core.c文件中实现,该文件是很重要的一个文件,因为所有上层操作最终都会调用该文件中的API来实现。在器件库文档中提到了核心库的作用,如下: 第
[单片机]
C语言基础知识科普
C语言是单片机开发中的必备基础知识,本文列举了部分STM32学习中比较常见的一些C语言基础知识。 1 位操作 下面我们先讲解几种位操作符,然后讲解位操作使用技巧。C语言支持以下六种位操作:79c55d0c-080b-11ed-ba43-dac502259ad0.png 下面,重点讲解一下位操作在单片机开发中的一些实用技巧。1.1 在不改变其他位的值的状况下,对某几个位进行设值 这个场景在单片机开发中经常使用,方法就是我们先对需要设置的位用&操作符进行清零操作,然后用 | 操作符设值。 比如,我要改变GPIOA的状态,可以先对寄存器的值进行&清零操作:79dc505c-080b-11ed-ba43-dac5
[单片机]
stm32 3.5固件库带sdio版本V4.5.0 bug修改
写的很详细 1:SD_WaitReadOperation()函数或者SD_WaitWriteOperation()函数进入死循环 原因:数据传输错误导致传输中断,无法满足退出等待的判断条件。 代码分析: SD_Error SD_WaitReadOperation(void) { SD_Error errorstatus = SD_OK; while ((SD_DMAEndOfTransferStatus() == RESET) && (TransferEnd == 0) && (TransferError == SD_OK)) {} if (TransferError != SD_OK) { return(Trans
[单片机]
STM32几种启动文件理解
在嵌入式应用程序开发过程里,由于使用C语言编程,基本很少涉及到机器底层寄存器的执行过程,一般都会直接在main函数里开始写代码,似乎main成为了理所当然的起点,尽管从C程序的角度来看程序都是直接从main函数开始执行。然而,MCU上电后,是如何寻找到并执行main函数这一问题却很自然的被忽略了!事实上微控制器是无法从硬件上去定位main函数的入口地址,因为使用C语言作为开发语言后,变量/函数的地址便由编译器在编译时自行分配,因此main函数的入口地址在编译后便不一定是一个绝对地址。MCU上电后又是如何寻找到这个入口地址呢?以前接触无论是PIC、AVR、MSP430或是51过程中都没涉及到启动文件的配置,仅仅只有熔丝位或配置字是需要
[单片机]
STM32 SysTick小结
SysTick简介 系统定时器,24位,只能递减,存在于内核,嵌套在 NVIC 中。其大部分内容可以查看 STM32F10xxx Cortex-M3编程手册-英文版。 SysTick工作过程 1.计数器在时钟驱动下从初值开始计数直到0。 2.为0时可以产生中断或置位 COUNTFLAG 标志位。 3.如果没有关闭,则初值再次开始计数,如此循环。 计数过程中,计数器的实时值可由 STK_VAL 位得到 SysTick寄存器 STK_CTRL 控制及状态寄存器,只有四个有效位: COUNTFLAG :如果计数器计到0,此位置1;如果软件读取这个位,这个位会置0; CLKSOURCE :时钟选择位;0=AHB/8;1=AHB
[单片机]
stm32低功耗模式下IO口状态
1、睡眠模式(Cortex-M3内核停止,外设运行) 这个时候,如果不锁定IO的话,有外部触发的IO电平会改变。 2、停止模式(所有时钟停止) 这个时候,外设已经停止工作,保持原来的电平,锁不锁都一样 3、待机模式(1.8V电源关闭) 在此情况下,IO都是高阻,除了复位引脚和唤醒引脚电平会变化。 怪不得我的灯有时候一直亮着。
[单片机]
关于STM32外部中断EXTI10-15,EXTI5-9共用一个中断向量处理方法
利用ITStatus EXTI_GetITStatus(uint32_t EXTI_Line) 函数判断具体的中断源 再进一步处理 注意:因为调用了 delay_ms() 函数 因此主函数的开头 必须初始化 延时函数 delay_init() ps 因为这个原因调了一天了 多么痛的领悟!! 具体如下:
[单片机]
基于STM32的SMS短消息收发系统
短消息服务(Short Message Senice)作为GSM网络提供给用户的一种基本的数字业务,已成为诸多领域远程监控的一种通信手段。在很多应用场合中都通过PC机直接控制短消息收发模块完成系统的数据采集或远程信息传输,但对于偏远地区、架设通信线路比较困难的地方,需要一种方便携带的设备控制短消息收发模块。系统通过在STM32上完成对短消息模块的控制,提出了一种嵌入式短消息收发系统的实现方法。 本文讨论一类通用的SMS短消息收发系统的实现方法,包含短消息调度和SMS短消息处理控制器的实现机制,特别对STM32嵌入式微处理器下短消息收发调度的实现过程和短消息处理状态机进行了详细讨论。在嵌入式系统中,时间和并行性(concur
[单片机]