搜档网
当前位置:搜档网 › STM32相关知识点总结

STM32相关知识点总结

STM32相关知识点总结
STM32相关知识点总结

GPIO篇

GPIO寄存器

端口配置低位寄存器CRL; 32位

端口配置高位寄存器CRH; 32位

端口输入数据寄存器IDR; 32位

端口输出数据寄存器ODR; 32位

置位/复位寄存器BSRR; 32位

复位寄存器BRR; 16位

锁定寄存器LCKR; 32位

GPIO库函数stm32f10x_gpio.h

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

GPIO相关类型名

typedef struct typedef struct

{ {

__IO uint32_t CRL; uint16_t GPIO_Pin;

__IO uint32_t CRH; GPIOSpeed_TypeDef GPIO_Speed; __IO uint32_t IDR; GPIOMode_TypeDef GPIO_Mode; __IO uint32_t ODR; }GPIO_InitTypeDef;

__IO uint32_t BSRR; typedef enum

__IO uint32_t BRR; { Bit_RESET = 0,

__IO uint32_t LCKR; Bit_SET

} GPIO_TypeDef;}BitAction;

GPIO_Pin取值

#define GPIO_Pin_0 #define GPIO_Pin_6 #define GPIO_Pin_12 #define GPIO_Pin_1 #define GPIO_Pin_7 #define GPIO_Pin_13 #define GPIO_Pin_2 #define GPIO_Pin_8 #define GPIO_Pin_14 #define GPIO_Pin_3 #define GPIO_Pin_9 #define GPIO_Pin_ 15 #define GPIO_Pin_4 #define GPIO_Pin_10 #define GPIO_Pin_All #define GPIO_Pin_5 #define GPIO_Pin_11

中断篇

NVIC相关寄存器AIRCR寄存器P139

中断使能设置寄存器ISER VECTKEY 31:16D R/W

中断使能清除寄存器ICER ENDIANESS 15D R

中断悬挂设置寄存器ISPR PRIGROUP 10:8D R/W

中断悬挂清除寄存器ICPR SYSRESETREQ 2D W

中断激活位寄存器IABR VECTCLRACTIVE 1D W

中断优先级寄存器IP VECTRESET 0D W

软件触发中断寄存器STIR

TVOR寄存器P138

TBLBASE 29段R/W

TBLOFF 28:7段R 向量表起始地址

EXTI相关寄存器

中断屏蔽寄存器EXTI_IMR 设置是否屏蔽中断请求线上的中断请求

事件屏蔽寄存器EXTI_EMR 设置是否屏蔽事件请求线上的中断请求

上升沿触发选择寄存器EXTI_RTSR 设置是否用上升沿来触发中断和事件

下降沿触发选择寄存器EXTI_FTSR 设置是否用下降沿来触发中断和事件

软件中断事件寄存器EXTI_SWIER 用于软件触发中断/事件

挂起寄存器EXTI_PR 用于保存中断/事件请求线上是否有请求

AFIO寄存器

AFIO_EVCR 事件控制寄存器

AFIO_EXTICRx 外部中断配置寄存器

AFIO_MAPR 复用重映射和调试I/O配置寄存器

系统控制寄存器SCB p138

EXTI相关库函数stm32f10x_exti.h

void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);

设置IO口与中断线的映射关系void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct); 初始化中断线:触发方式等ITStatus EXTI_GetITStatus(uint32_t EXTI_Line); 判断中断线中断状态,是否发生void EXTI_ClearITPendingBit(uint32_t EXTI_Line); 清除中断线上的中断标志位

AFIO相关函数stm32f10x_rcc.h stm32f10x_gpio.h

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); 使能AFIO时钟GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE); 开启重映射

根据第一个参数,来确定是部分重映射还是全部重映射

NVIC相关函数core_cm3.h misc.h

void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup); 中断优先级分组函数void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct); 中断参数初始化函数static __INLINE void NVIC_SetPendingIRQ(IRQn_Type IRQn);挂起中断

static __INLINE uint32_t NVIC_GetPendingIRQ(IRQn_Type IRQn);

static __INLINE void NVIC_ClearPendingIRQ(IRQn_Type IRQn) 解挂中断

static __INLINE uint32_t NVIC_GetActive(IRQn_Type IRQn) IABR

EXTI相关类型名

GPIO_PortSource取值typedef struct

#define GPIO_PortSourceGPIOA {

#define GPIO_PortSourceGPIOB uint32_t EXTI_Line;

#define GPIO_PortSourceGPIOC EXTIMode_TypeDef EXTI_Mode;

#define GPIO_PortSourceGPIOD EXTITrigger_TypeDef EXTI_Trigger;

#define GPIO_PortSourceGPIOE FunctionalState EXTI_LineCmd;

#define GPIO_PortSourceGPIOF }EXTI_InitTypeDef;

GPIO_PinSource取值

#defineGPIO_PinSource0 #define GPIO_PinSource6 #define GPIO_PinSource12 #define GPIO_PinSource1 #defineGPIO_PinSource7 #define GPIO_PinSource13 #define GPIO_PinSource2 #define GPIO_PinSource8 #define GPIO_PinSource14 #define GPIO_PinSource3 #define GPIO_PinSource9 #define GPIO_PinSource15 #define GPIO_PinSource4 #define GPIO_PinSource10

#define GPIO_PinSource5 #define GPIO_PinSource11

EXTI_Line取值

#define EXTI_Line0 #define EXTI_Line7 #define EXTI_Line14

#define EXTI_Line1 #define EXTI_Line8 #define EXTI_Line15

#define EXTI_Line2 #define EXTI_Line9 #define EXTI_Line16

#define EXTI_Line3 #define EXTI_Line10 #define EXTI_Line17

#define EXTI_Line4 #define EXTI_Line11 #define EXTI_Line18

#define EXTI_Line5 #define EXTI_Line12 #define EXTI_Line19

#define EXTI_Line6 #define EXTI_Line13

typedef struct typedef enum typedef enum p145 { { {

__IO uint32_t IMR; EXTI_Mode_Interrupt = 0x00, EXTI_Trigger_Rising = 0x08,

__IO uint32_t EMR; EXTI_Mode_Event = 0x04 EXTI_Trigger_Falling = 0x0C,

__IO uint32_t RTSR; }EXTIMode_TypeDef;EXTI_Trigger_Rising_Falling = 0x10 __IO uint32_t FTSR; }EXTITrigger_TypeDef;

__IO uint32_t SWIER;

__IO uint32_t PR;

} EXTI_TypeDef;

typedef struct NVIC_PriorityGroup取值

{ #define NVIC_PriorityGroup_0

uint8_t NVIC_IRQChannel; #define NVIC_PriorityGroup_1

uint8_t NVIC_IRQChannelPreemptionPriority; #define NVIC_PriorityGroup_2

uint8_t NVIC_IRQChannelSubPriority; #define NVIC_PriorityGroup_3 FunctionalState NVIC_IRQChannelCmd; #define NVIC_PriorityGroup_4

} NVIC_InitTypeDef;

AFIO相关类型名

typedef struct

{

__IO uint32_t EVCR;

__IO uint32_t MAPR;

__IO uint32_t EXTICR[4];

__IO uint32_t MAPR2;

} AFIO_TypeDef;

USART篇

USART相关寄存器

状态寄存器USART_SR 反映USART单元状态

数据寄存器USART_DR 用于保存接收或发送的数据

波特比率寄存器USART_BRR 用于设置USART的波特率

控制寄存器1 USART_CR1 用于控制USART

控制寄存器2 USART_CR2 用于控制USART

控制寄存器3 USART_CR3 用于控制USART

保护时间和预分频寄存器USART_GTPR 保护时间和预分频

USART相关库函数stm32f10x_usart.h

void USART_Init(); 串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能void USART_Cmd(); 使能串口

void USART_ITConfig(); 使能相关中断

void USART_SendData(); 发送数据到串口,DR

void USART_ClearFlag(); 清除状态标志位

void USART_ClearITPendingBit(); 清除中断状态标志位

uint16_t USART_ReceiveData(); 接受数据,从DR读取接受到的数据FlagStatus USART_GetFlagStatus(); 获取状态标志位

ITStatus USART_GetITStatus(); 获取中断状态标志位

USART_DeInit(); 串口复位

FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG); void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

串口传输状态获取

typedef struct p168 t ypedef struct

{ {__IO uint16_t SR; uint32_t USART_BaudRate; 波特率__IO uint16_t DR; uint16_t USART_WordLength; 字长__IO uint16_t BRR; uint16_t USART_StopBits; 停止位长度__IO uint16_t CR1; uint16_t USART_Parity; 奇偶校验__IO uint16_t CR2; uint16_t USART_Mode; 接收或发送模式__IO uint16_t CR3; uint16_t USART_HardwareFlowControl; 硬件流控制__IO uint16_t GTPR; } USART_InitTypeDef;}USART_TypeDef;

typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;

USART_IT取值

#define USART_IT_PE #define USART_IT_IDLE #define USART_IT_ORE #define USART_IT_TXE #define USART_IT_LBD #define USART_IT_NE

#define USART_IT_TC #define USART_IT_CTS #define USART_IT_FE

#define USART_IT_RXNE #define USART_IT_ERR

USART_FLAG取值typedef struct p169

#define USART_FLAG_CTS #define USART_FLAG_IDLE { uint16_t USART_Clock #define USART_FLAG_LBD #define USART_FLAG_ORE uint16_t USART_CPOL; #define USART_FLAG_TXE #define USART_FLAG_NE uint16_t USART_CPHA; #define USART_FLAG_TC #define USART_FLAG_FE uint16_t USART_LastBit; #define USART_FLAG_RXNE #define USART_FLAG_PE } USART_ClockInitTypeDef;

通用定时器篇

TIMx相关寄存器p189

计数器当前值寄存器CNT

预分频寄存器TIMx_PSC

自动重装载寄存器TIMx_ARR

控制寄存器1 TIMx_CR1

控制寄存器2 TIMx_CR2

DMA中断使能寄存器TIMx_DIER

TIMx相关库函数stm32f10x_tim.h

void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);

定时器参数初始化

void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState) 定时器使能函数

状态标志位获取和清除

FlagStatus TIM_GetFlagStatus(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);

void TIM_ClearFlag(TIM_TypeDef* TIMx, uint16_t TIM_FLAG);

ITStatus TIM_GetITStatus(TIM_TypeDef* TIMx, uint16_t TIM_IT);

void TIM_ClearITPendingBit(TIM_TypeDef* TIMx, uint16_t TIM_IT);

TIMx相关类型名

TIM_TypeDef p191

typedef struct TIM_IT取值

{ #define TIM_IT_Update #define TIM_IT_CC4

uint16_t TIM_Prescaler; #define TIM_IT_CC1 #define TIM_IT_COM

uint16_t TIM_CounterMode; #define TIM_IT_CC2 #define TIM_IT_Trigger uint16_t TIM_Period; #define TIM_IT_CC3 #define TIM_IT_Break

uint16_t TIM_ClockDivision;

uint8_t TIM_RepetitionCounter;

} TIM_TimeBaseInitTypeDef;

TIM_FLAG取值

#define TIM_FLAG_Update #define TIM_FLAG_CC4 #define TIM_FLAG_CC1OF #define TIM_FLAG_CC1 #define TIM_FLAG_COM #define TIM_FLAG_CC2OF #define TIM_FLAG_CC2 #define TIM_FLAG_Trigger #define TIM_FLAG_CC3OF #define TIM_FLAG_CC3 #define TIM_FLAG_Break #define TIM_FLAG_CC4OF

RTC篇

RTC相关寄存器P210

RTC控制寄存器(RTC_CRH,RTC_CRL)

RTC预分频装载寄存器(RTC_PRLH,RTC_PRLL)

RTC预分频余数寄存器(RTC_DIVH,RTC_DIVL)

RTC计数器寄存器(RTC_CNTH,RTC_CNTL)

RTC闹钟寄存器(RTC_ALRH ,RTC_ALRL)

备份寄存器BKP_DRx(x=11~42)

RTC相关库函数stm32f10x_rtc.h stm32f10x_pwr.h stm32f10x_rcc.h stm32f10x_bkp.h

void RTC_ITConfig(uint16_t RTC_IT, FunctionalState NewState); RTC中断设置函数

void RTC_EnterConfigMode(void); 允许RTC配置:CRL位CNF

void RTC_ExitConfigMode(void); 退出配置模式: CRL位CNF

void RTC_SetCounter(uint32_t CounterValue); 设置计数器值:CNTH/CNTL

void RTC_SetPrescaler(uint32_t PrescalerValue); 预分频配置:PRLH/PRLL

void RTC_SetAlarm(uint32_t AlarmValue); 闹钟设置:ALRH/ALRL

void RTC_WaitForLastTask(void); 等待上次操作完成:CRL位RTOFF

void RTC_WaitForSynchro(void); 等待时钟同步:CRL位RSF

void RTC_ClearITPendingBit(uint16_t RTC_IT);

void RTC_ClearFlag(uint16_t RTC_FLAG);

void RCC_RTCCLKConfig(uint32_t CLKSource);//时钟源选择

void RCC_RTCCLKCmd(FunctionalState NewState) //时钟使能

FlagStatus RTC_GetFlagStatus(uint16_t RTC_FLAG);

ITStatus RTC_GetITStatus(uint16_t RTC_IT);

uint32_t RTC_GetCounter(void);

uint32_t RTC_GetDivider(void);

PWR_BackupAccessCmd(); //BKP后备区域访问使能

RCC_APB1PeriphClockCmd() //使能PWR和BKP时钟

RCC_LSEConfig(); //开启LSE,RTC选择LSE作为时钟源

uint16_t BKP_ReadBackupRegister(uint16_t BKP_DR); //读BKP寄存器void BKP_WriteBackupRegister(uint16_t BKP_DR, uint16_t Data); //写BKP

RTC相关类型名

RTC_IT取值RCC_LSE取值BKP_DR取值

#define RTC_IT_OW #define RCC_LSE_OFF #define BKP_DR1

#define RTC_IT_ALR #define RCC_LSE_ON .....

#define RTC_IT_SEC #define RCC_LSE_Bypass #define BKP_DR42

RTC_FLAG取值RCC_RTCCLKSource取值

#define RTC_FLAG_RTOFF #define RCC_RTCCLKSource_LSE

#define RTC_FLAG_RSF #define RCC_RTCCLKSource_LSI

#define RTC_FLAG_OW #define RCC_RTCCLKSource_HSE_Div128 #define RTC_FLAG_ALR

#define RTC_FLAG_SEC

STM32L4库学习总结

STM32L4库学习总结 ST为开发者提供了非常方便的开发库。到目前为止,有标准外设库(STD库)、HAL库、LL库三种。前两者都是常用的库,后面的LL库是ST最近才添加,随HAL源码包一起提供,目前支持的芯片也偏少。一般来说STD库和LL库是不兼容的。 标准外设库(Standard Peripherals Library)是对STM32芯片的一个完整的封装,包括所有标准器件外设的器件驱动器。这应该是目前使用最多的ST库。几乎全部使用C语言实现。但是,标准外设库也是针对某一系列芯片而言的,没有可移植性。标准外设库仍然接近于寄存器操作,主要就是将一些基本的寄存器操作封装成了C函数。开发者需要关注所使用的外设是在哪个总线之上,具体寄存器的配置等底层信息。不支持从STM32L0、L4和F7以后的芯片。 HAL是Hardware Abstraction Layer的缩写,中文名:硬件抽象层。HAL库是ST为STM32最新推出的抽象层嵌入式软件,可以更好的确保跨STM32产品的最大可移植性。该库提供了一整套一致的中间件组件,如RTOS,USB,TCP / IP和图形等。 HAL库是基于一个非限制性的BSD许可协议(Berkeley Software Distribution)而发布的开源代码。ST制作的中间件堆栈(USB主机和设备库,STemWin)带有允许轻松重用的许可模式,只要是在ST公司的MCU 芯片上使用,库中的中间件(USB 主机/设备库,STemWin)协议栈即被允许随便修改,并可以反复使用。至于基于其它著名的开源解决方案商的中间件(FreeRTOS,FatFs,LwIP和PolarSSL)也都具有友好的用户许可条款。可以说HAL库就是用来取代之前的标准外设库的。相比标准外设库,STM32Cube HAL库表现出更高的抽象整合水平,HAL API集中关注各外设的公共函数功能,这样便于定义一套通用的用户友好的API函数接口,从而可以轻松实现从一个STM32产品移植到另一个不同的STM32系列产品。HAL 库是ST未来主推的库,从前年开始ST新出的芯片已经没有STD库了,比如F7系列。目前,HAL库已经支持STM32全线产品。使用HAL库编程,最好尽量符合HAL库编程的整体架构。 LL库(Low Layer)是ST最近新增的库,与HAL捆绑发布,文档也是和HAL文档在一起的,比如:在STM32F3x的HAL库说明文档中,ST新增了LL库这一章节,但是在F2x的HAL 文档中就没有。LL库更接近硬件层,对需要复杂上层协议栈的外设不适用,直接操作寄存器。其支持所有外设。使用方法:独立使用,该库完全独立实现,可以完全抛开HAL库,只用LL库编程完成。在使用STM32CubeMX生成项目时,直接选LL库即可。如果使用了复杂的外设,例如USB,则会调用HAL库混合使用,和HAL库结合使用。LL库文件的命名方式和HAL库基本相同。个人感觉,LL库就是原来的标准外设库移植到Cube下的新的实现。因为使用LL库编程和使用标准外设库的方式基本一样

奋斗STM32开发板Tiny NRF24L01转USB虚拟串口例程手册

奋斗版 STM32 开发板例程手册———NRF24L01+转 USB 虚拟串口实验
https://www.sodocs.net/doc/f68891499.html,
NRF24L01+转 USB 虚拟串口实验
实验平台:奋斗版STM32开发板Tiny 实验内容:板子通过USB加电后,先向串口1输出一串测试数据,然后USB被PC识 别出来,虚拟出一个串口号给这个USB设备,此时可以通过在PC端的串口助手类 软件选择该串口号。进入串口软件界面,可以通过软件无线收发一帧长度最长 为32字节的数据。该例程可以和V3及MINI板的NRF24L01 UCGUI例程配合使用。
预先需要掌握的知识 2.4G通信模块NRF24L01 1. 产品特性
2.4GHz 全球开放ISM 频段,最大0dBm 发射功率,免许可证使用 支持六路通道的数据接收 低工作电压:1.9 1.9~3.6V 低电压工作 高速率:2Mbps,由于空中传输时间很短,极大的降低了无线传输中的碰撞现象(软件设置1Mbps或者2Mbps的空中传输速率) 多频点:125 频点,满足多点通信和跳频通信需要 超小型:内置2.4GHz天线,体积小巧,15x29mm(包括天线) 低功耗:当工作在应答模式通信时,快速的空中传输及启动时间,极大的降低了电流消耗。 低应用成本:NRF24L01 集成了所有与RF协议相关的高速信号处理部分,比如:自动重发丢失数据包和自动产生应答信号等, NRF24L01的SPI接口可以利用单片机的硬件SPI口连接或用单片机I/O口进行模拟,内部有FIFO可以与各种高低速微处理器接口, 便于使用低成本单片机。 便于开发:由于链路层完全集成在模块上,非常便于开发。 自动重发功能,自动检测和重发丢失的数据包,重发时间及重发次数可软件控制 自动存储未收到应答信号的数据包 自动应答功能,在收到有效数据后,模块自动发送应答信号,无须另行编程 载波检测—固定频率检测 内置硬件CRC 检错和点对多点通信地址控制 数据包传输错误计数器及载波检测功能可用于跳频设置 可同时设置六路接收通道地址,可有选择性的打开接收通道 标准插针Dip2.54MM 间距接口,便于嵌入式应用
2.基本电气特性
淘宝店铺:https://www.sodocs.net/doc/f68891499.html,
1

STM32 IIC 学习笔记总结

STM32系列IIC学习笔记经验总结一、各寄存器内容与组织:控制、地址匹配、数据、状态、时钟控制、上升沿控制

二、IIC协议及STM32的master实现 EVENT后的第一个符号表示事件发生后对应的标志位的状态,着重看7位地址的通信;

三、基础知识(主要讨论起主机模式,从机模式的配置与使用可类比) 1.默认工作在从机模式,产生起始信号后自动转为主机模式,产生终止信号或仲裁失权后自动转为从机模式;起止信号由主 机模式下的软件实现,地址也只能由主机发送,响应信号由接收器发出(软件实现),要注意区别主机、从机、发送机、接收机; 2.数据通信的直接通道,SDA LineShift RegisterDRMemory(数据寄存器与存储器直接的数据交换发生在DMA模式, 另外若从机在SDA接收到的是地址则直接会与地址寄存器比较,而不会送入数据寄存器) 3.主机产生时钟信号,一串数据总是以起始于start信号,终止于stop信号,一旦SDA线上产生start位信号,主机模 式便被选中;9个寄存器的功能分配简单明了:I2C_CR2主要配置时钟与模块中断及DMA使能位,I2C_CR1则主要产生Start等控制信号,I2C_SR2主要是MSL、TRA和BUSY标志位,I2C_SR1则是其他事件的标志位,接下来就是存储数据的I2C_DR,时钟设置的I2C_CC4R和I2C_TRISE,地址匹配的I2C_OAR1和I2C_OAR2; 4.主机模式必要操作序列:外围时钟输入最少2M(标准模式)、4M(快速模式) 1)配置I2C_CR2寄存器以产生正确时序; 2)配置时钟控制寄存器I2C_CCR; 3)配置上升时间寄存器I2C_TRISE; 4)配置I2C_CR1寄存器以使能接口电路; 5)配置I2C_CR1寄存器,置位START位以产生起始信号; 5.时序具体解析 1)Start信号,置位I2C_CR1的START位以产生起始信号(在总线空闲时,即I2C_SR2的BUSY清零),使转为主机模式(置位I2C_SR2的MSL);在主机模式下,置位START位会在当前字节传输完成后产生一个重启ReStart信号;一旦Start信号送出,I2C_SR1的SB位会由硬件置位并产生中断(前提是ITEVFEN位被置位,貌似文档有误,我认为应是IC2_SR2的ITEVTEN位),然后需要读SR1和写DR以清零SB(这也符合操作时序); 2)从机地址发送,7位模式下,地址字节一旦送出,I2C_SR1的ADDR位会由硬件置位并产生中断(前提是ITEVFEN 置位),然后主机等待读取SR1和SR2以清零ADDR(稍微符合,读SR2貌似饶了一步);7位模式下,地址字节最低位若是0则说明主机要进入发送模式,若是1则是接收模式;I2C_SR2的TRA表示主机在发送模式还是接收模式; 3)主机发送模式,地址送出且ADDR清零后,主机会将DR中数据发送到SDA line(当然经过Shift Register),主机会等到第一个数据写入DR(EV8_1阶段),若收到响应脉冲,SR1中的TxE位会置位(前提是ITEVFEN和ITBUFEN已置位);在最后一个字节传输结束前的传输过程中,若TxE置位且某数据字节没有写入DR,BTF会置位直到(硬件清零)该数据字节被写入到DR,这个过程中SCL会一直被拉低; 4)主机发送模式关闭通信,最后一个字节被写入DR,CR1的STOP位要由软件置位而产生停止信号,接口自动转为从机模式(MSL清零);置位Stop位即对应于EV8_2事件; 5)主机接收模式,地址送出且ADDR清零后,主机会进入接收模式,接口会从SDA line中读数据到DR中(同样经过Shift Register);每个字节接收后的操作序列为,产生应答信号(前提是CR1的ACK位置位),RxNE位置位并产生中断(前提是SR2的ITEVFEN和ITBUFEN置位);在最后一个字节传输结束前的传输过程中,若RxNE 置位且某数据未从DR中读取,BTF会置位直到(硬件清零)该数据字节被读出,这个过程SCL会一直被拉低; 6)主机接收模式关闭通信,收到最后一个字节后会发送NACK信号给从机,从机收到NACK会释放总线(SDA和SCL),此时主机便可发送一个Stop或Restart信号;在读完倒数第二个字节后(RxNE中断后),要清零ACK 位以产生NACK应答,要置位STOP/START位以产生Stop/Restart信号;在单字节数据接收状况,NACK 要在ADDR清零前(EV6)设置,STOP信号要在ADDR清零后配置;Stop信号产生后,主机自动进入从机模式(SR2的MSL清零); 7)最后一字节数据接收的ACK响应前若RxNE清零(ACK清零与Stop请求)没有完成,则建议采取以下步骤以确保ACK位在最后一字节数据接收前被清零,STOP位在最后一字节数据接受完后(没有附加数据)被置位: (1)2字节的数据接收:等到ADDR=1;清零ACK,置位POS;清零ADDR;等到BTF=1(数据1在DR,

STM32-PWM输出总结讲课讲稿

学习后发现stm32的定时器功能确实很强大,小总结一下方便以后使用的时候做参考。Stm32定时器一共分为三种:tim1和tim8是高级定时器,6和7是基本定时器,2—5是通用定时器。从名字就可以看得出来主要功能上的差异。今天我主要是用定时器做pwm输出,所以总结也主要是针对pwm方面的。 先大致说下通用和高级定时器的区别。通用的可以输出四路pwm信号互不影响。高级定时器可以输出三对互补pwm信号外加ch4通道,也就是一共七路。 所以这样算下来stm32一共可以生成4*5+7*2=30路pwm信号。接下来还有功能上的区别:通用定时器的pwm信号比较简单,就是普通的调节占空比调节频率(别的不常用到的没去深究);高级定时器的还带有互补输出功能,同时互补信号可以插入死区,也可以使能刹车功能,从这些看来高级定时器的pwm天生就是用来控制电机的。 Pwm输出最基本的调节就是频率和占空比。频率当然又和时钟信号扯上了关系。高级定时器是挂接到APB2上,而通用定时器是挂接到APB1上的。APB1和APB2的区别就要在于时钟频率不同。APB2最高频率允许72MH,而APB1最高频率为36MHZ。这样是不是通用定时器只最高36MHZ频率呢,不是的;通用定时器时钟信号完整的路线应该是下面这样的:AHB(72mhz)→APB1分频器(默认2)→APB1时钟信号(36mhz)→倍频器(*2倍)→通用定时器时钟信号(72mhz)。 在APB1和定时器中间的倍频器起到了巨大的作用,假如红色字体的“APB1分频器”假如不为1(默认是2),倍频器会自动将APB1时钟频率扩大2倍后作为定时器信号源,这个它内部自动控制的不用配置。设置这个倍频器的目的很简单就是在APB1是36mhz的情况下通用定时器的频率同样能达到72mhz。我用的库函数直接调用函数SystemInit(); 这个函数之后时钟配置好了:通用定时器和高级定时器的时钟现在都是72mhz(你也可以自己再配置一下RCC让他的频率更低,但是不能再高了)。定时器接下来还有一个分频寄存器:TIMX_PSC 经过他的分频后,才是定时器计数的频率。所以真正的时钟频率应该是72mhz/(TIMX_PSC-1),我们设为tim_frepuency下面还会用到。 stm32的时钟频率弄得确实是很饶人的,所以关键就是先要把思路理清楚。时钟的频率弄好了下面终于可以开说重点PWM了。当然还少不了频率:pwm主要就是控制频率和占空比的:这两个因素分别通过两个寄存器控制:TIMX_ARR和TIMX_CCRX。ARR寄存器就是自动重装寄存器,也就是计数器记到这个数以后清零再开始计,这样pwm的频率就是tim_frequency/(TIMX_ARR-1)。在计数时会不停的和CCRX寄存器中的数据进行比较,如果小于的话是高电平或者低电平,计数值大于CCRX值的话电平极性反相。所以这也就控制了占空比。 下面是定时器1的配置代码: GPIO_InitTypeDef GPIO_InitStructure2; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_BDTRInitTypeDef TIM_BDTRInitStructure; //第一步:配置时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA| RCC_APB2Periph_GPIOB|RCC_APB2Periph_TIM1 ,ENABLE); //第二步,配置goio口 /********TIM1_CH1 引脚配置*********/

奋斗版STM32开发板Mini板硬件说明书

奋斗版STM32开发板Mini板的硬件说明 1. 供电电路: AMS1117-3.3输入+5V,提供3.3V的固定电压输出,为了降低电磁干扰,C1-C5为CPU 提供BANK电源(VCC:P50、P75、P100、P28、P11 GND:P49、P74、P99、P27、P10)滤波。CPU的模拟输入电源供电脚VDDA(P22)通过L1 22uH的电感与+3.3V VDD电压连接,CPU的模拟地VSSA(P19)及VREF-(P20)通过R1 0欧电阻与GND连接。VREF+(P21)采用VDDA(P22)电源基准。 为RTC的备份电源采用V1 3.3V锂离子片状电池。 2. 启动方式设置: Boot1—Boot0(P37,P94): x0: 内部程序存储区启动01:系统存储区启动(为异步通信ISP编程方式) 在此将BOOT1始终设置为0, BOOT0为可变的状态,在正常模式下将其置为0,在ISP 编程时将其置为1。用JP1跳线块设置,开路为ISP模式,短路为正常运行模式。 3. 时钟源电路: 外部晶体/陶瓷谐振器(HSE)(P12、P13):B1:8MHz晶体谐振器,C8,C9谐振电容选择10P。系统的时钟经过PLL模块将时钟提高到72MHz。 低速外部时钟源(LSE)(P8、P9):B2: 32.768KHz晶体谐振器。C10,C11谐振电容选择

10P。注意:根据ST公司的推荐, B2要采用电容负载为6P的晶振,否则有可能会出现停振的现象。 4. SPI存储电路: D2 AT45DB161(2M Bytes)CPU采用SPI1端口PA7-SPI1-MOSI(P32)、PA6-SPI1-MISO (P31)、PA5-SPI1-SCK(P30)、PA4-SPI1-NSS(P29)控制读写访问, SPI1地址:0x4000 3800 - 0x4000 3BFF 5. 显示及触摸接口模块: 显示器采用2.4” TFT320X240LCD(控制器ILI9325), 采用CPU的FSMC功能,LCD片选CS采用FSMC_NE1(P88),FSMC_A16(P58)作为LCD的RS选择,FSMC_nWE(P86)作为LCD的/WR, FSMC_nOE(P85)作为LCD的/RD, LCD的RESET脚用CPU的PE1(P98)(LCD-RST),FSMC_D0---FSMC_D15和LCD的D1-D8 D10-D17相互连接,触摸屏接口采用SPI1接口,片选为PB7-SPI1-CS3,由于LCD背光采用恒流源芯片PT4101控制,采用了PWM控制信号控制背光的明暗, PWM信号由PD13-LIGHT-PWM来控制。触摸电路的中断申请线由PB6-7846-INT接收。 LCD寄存器地址为:0x6000 0000, LCD数据区地址:0x6002 0000。

金龙STM32F207开发板用户手册

1.概述 金龙STM32开发板用户手册芯片描述 -ARM32-bit Cortex-M3CPU -120MHz maximum frequency,150DMIPS/1.25DMIPS/MHz -Memory protection unit Memories -Up to1Mbyte of Flash memory -Up to128+4Kbytes of SRAM -Flexible static memory controller (supports Compact Flash,SRAM,PSRAM,NOR,NAND memories) -LCD parallel interface,8080/6800modes Clock,reset and supply management -1.8to3.6V application supply and I/Os -POR,PDR,PVD and BOR -4to25MHz crystal oscillator -Internal16MHz factory-trimmed RC -32kHz oscillator for RTC with calibration -Internal32kHz RC with calibration Low power -Sleep,Stop and Standby modes -VBAT supply for RTC, C32bit backup registers 20 optional4KB backup SRAM C12-bit,0.5us A/D converters 3 -up to24channels -up to6MSPS in triple interleaved mode C12-bit D/A converters 2 General-purpose DMA -16-stream DMA controller centralized FIFOs and burst support Up to17timers -Up to twelve16-bit and two32-bit timers Debug mode -Serial wire debug(SWD)&JTAG interfaces -Cortex-M3Embedded Trace Macrocell Up to140fast I/O ports with interrupt capability -51/82/114/140I/Os,all5V-tolerant Up to15communication interfaces C I2C interfaces(SMBus/PMBus) -Up to3 -Up to6USARTs(7.5Mbit/s,ISO7816interface,LIN,IrDA,modem control)

STM32全面学习总结

一、文档和库规范 固件库命名规则 (1)外设函数的命名以该外设的缩写加下划线为开头。每个单词的第一个字母都由英文字母大写书写,例如:SPI_SendData。在函数名中,只允许存在一个下划线,用以分隔外设缩写和函数名的其它部分。 (2)名为PPP_Init的函数,其功能是根据PPP_InitTypeDef中指定的参数,初始化外设PPP,例如TIM_Init.(3)名为PPP_DeInit的函数,其功能为复位外设PPP的所有寄存器至缺省值,例如TIM_DeInit. (4)名为PPP_StructInit的函数,其功能为通过设置PPP_InitTypeDef 结构中的各种参数来定义外设的功能,例如:USART_StructInit (5)名为PPP_Cmd的函数,其功能为使能或者失能外设PPP,例如:SPI_Cmd. (6)名为PPP_ITConfig的函数,其功能为使能或者失能来自外设PPP某中断源,例如:RCC_ITConfig. (7)名为PPP_DMAConfig的函数,其功能为使能或者失能外设PPP的DMA接口,例如:TIM1_DMAConfig. 用以配置外设功能的函数,总是以字符串“Config”结尾,例如GPIO_PinRemapConfig. (8)名为PPP_GetFlagStatus的函数,其功能为检查外设PPP某标志位被设置与否,例如:I2C_GetFlagStatus. (9)名为PPP_ClearFlag的函数,其功能为清除外设PPP标志位,例如:I2C_ClearFlag. (10)名为PPP_GetITStatus 的函数,其功能为判断来自外设PPP的中断发生与否,例如:I2C_GetITStatus. (11)名为PPP_ClearITPendingBit的函数,其功能为清除外设PPP中断待处理标志位,例如:I2C_ClearITPendingBit. 编码规则 变量

STM32F429开发板用户手册

STM32F429开发板用户手册 介绍 STM32F429(32F429IDISCOVERY)开发板可以帮助你去学习高性能STM32F4系列,并去开发你自己的应用。它包含了一个STM32F429ZIT6和一个嵌入ST-LINK/V2调试接口,2.4吋TFTLCD,64MbitsSDRAM,ST微机电陀螺仪,按键和USB OTG接口。

1约定 下表提供了一些约定惯例,目前的文档可能会用到。

2快速入门 STM32F429开发板是一种廉价且易于上手的开发套件,可以让使用者快速评估和开始STM32F4的开发工作。 在安装和使用产品以前,请接收评估产品许可协议。 2.1启动 跟随以下顺序来设置STM32F429开发板并开始开发应用: 1、确认跳线JP3和CN4被设置为“on”(开发模式) 2、连接STM32F429Discovery开发板CN1到PC,使用USB电缆(type A/mini-B),开发板上电。 3、屏幕上以下应用可用: 时钟日历和游戏 视频播放器和图片浏览器(播放浏览USB大容量存储器上的视频和图片)性能显示器(观察CPU负载和图形测试) 系统信息 4、演示软件,也像其他软件例程,运行你用来开发STM32F4。 5、从例程开始开发你自己的应用吧。 2.2系统要求 ?Windows PC(XP,Vista,7) ?USB type A to mini-B cable 2.3支持STM32F429开发板的开发工具 ?Altium:TASKING?VX-Toolset ?Atollic:TrueSTUDIO ?IAR:EWARM ?Keil?:MDK-ARM 2.4订购码 要订购STM32F429Discovery kit,请使用STM32F429I-DISCO订购码。 3特性 STM32F429Discovery开发板提供一下特性: ?S TM32F429ZIT6具有2MB闪存,256KB的RAM,LQFP144封装。 ?板载ST-LINK/V2,带有选择模式跳线,可以作为独立的ST-LINK/V2使用。 ?板电源:通过USB总线或外部3V或5V电源。 ?L3GD20:ST微机电动作传感器,3轴数字输出陀螺仪 ?TFT LCD,2.4寸,262K色RGB,240*230分辨率 ?SDRAM64Mbits(1Mbit x16-bit x4-bank),包含自动刷新模式和节能模式 ?六个LED: LD1(红绿):USB通信 LD2(红):3.3V电源 两个用户LED LD3(绿),LD4红 两个USBOTG LED:LD5(绿)VBUS和LD6OC(过流) ?两个按键(user and reset)

STM32 NUCLEO板用户手册

April 2014DocID025833 Rev 3 1/49 Introduction The STM32 Nucleo board (NUCLEO-F030R8, NUCLEO-F072RB, NUCLEO-F103RB, NUCLEO-F302R8, NUCLEO-F401RE, NUCLEO-L152RE ) provides an affordable and flexible way for users to try out new ideas and build prototypes with any STM32 microcontroller lines, choosing from the various combinations of performance, power consumption and features. The Arduino ? connectivity support and ST Morpho headers make it easy to expand the functionality of the Nucleo open development platform with a wide choice of specialized shields. The STM32 Nucleo board does not require any separate probe as it integrates the ST-LINK/V2-1 debugger/programmer. The STM32 Nucleo board comes with the STM32 comprehensive software HAL library together with various packaged software examples, as well as direct access to mbed online resources at https://www.sodocs.net/doc/f68891499.html, . (1) 1.Picture not contractual. https://www.sodocs.net/doc/f68891499.html,

STM32个人总结

基础入门编 1.搭建开发环境 详情看光盘资料,主要是软件安装和设置。 2.新建工程 可以直接用模板,了解每个文件的含义,会使用chm帮助。 3.STM32库 库的含义。 4.GPIO流水灯 认识RCC,GPIO的各种模式,寄存器的种类和作用。 5.POLLING按键 主要介绍了各种模式,实验通过不断读取GPIO的状态以达到判断按键的目的。 6.EXTI按键 使用了GPIO的EXTI中断来判断按键,记住EXTI要开AFIO(重映射也要开),另外SYSTICK不归NVIC管。注意NVIC_IRQChannelSubPriority(),最多可以判断16种优先级,即16种中断,同一个中断入口的引脚引发的中断也算是同一种中断,同种种中断不能相互嵌套。(响应优先级是在抢占优先级相同时,同时发生才有用,其中一个发生后无用)。 7.SYSTICK 关键是SYSTICK的初始化函数,了解那几个寄存器的作用和特殊的宏定义(就是选择自己想选择的位),根据配置可以延时不同的时间,详情看代码。 8.串口通信 开启相应RCC,做好Iint,配置好中断(可选,主要用于接收),然后弄好fputc(),可以直接用printf()直接输出。 9.DMA 不经CPU处理直接相互传输,开启相应的DMA,配置好from..to..,字节大小等,用cmd 命令后可以开启传输。 10.ADC(DMA) 主要就是初始化好ADC,什么通道模式之类的,详情看代码,由于使用了DMA模式,要配置好DMA,有ADC_DMACmd()开始传输。 11..FSMC显示英文 用FSMC直接写入液晶的控制芯片的显存,注意使用的是16位的颜色,线的接法要注意(RGB为5:6:5)。 由于用的是模拟的方法,输入数据时用的都是宏,该地址线用来作为C/D,16位是往前移了一位的,因此要乘以2. 值得注意的是开窗的显示手法,在显示字符前先“开”一个窗,当一行数据写完时,自动换到下一行继续写。 在写数据的函数那里可以更换字的背景色,也可以修改该函数的.h的BACKGROUND 的宏定义。 FSMC的初始化暂时不清楚,应该是关于NOR FLASH的。控制代码是配好的,具体的设置看参考文档(有关定位坐标和扫描方式都与此有关)。 (NOR-FLASH 有4个bank,NE[3:0],区分不同的bank,实验用NE1;DataAddress_Mux 数据域地址线复用;8位地址线25:0->24:0 16位地址线25:1->24:0,宏定义是16位的地址线,对应的机内地址*2左移1位) 12.IIC-EEPROM

STM32_WIFI开发板开发指南及使用说明-V0.32

北京世讯电子技术有限公司
STM32 WIFI 开发板开发指南及教程
欢迎选用世讯电子的开发板! 注意: 注意:如果你是初学者, 如果你是初学者,务必仔细 务必仔细阅读 仔细阅读每节内容 阅读每节内容! 每节内容! 1. 使用指南
1.1 adhoc 模式工作( 模式工作(板子默认 wifi 工作模式) 工作模式)
拿到板子后, ,先不要下载程序, 1) 拿到板子后 先不要下载程序,先给板子上电, 先给板子上电,测试运行一下! 测试运行一下! 2) 观看开发板上的指示灯, 观看开发板上的指示灯,等到 WIFI 模块旁边的 LED 不闪烁了。 不闪烁了。 3) 打开电脑的 wifi, 搜索一下, 搜索一下,看看能不能找到“ 看看能不能找到“ShiXun_ADHOC”这样的网 络,如下图所示
4) 如果不能找到“ 如果不能找到“ShiXun_ADHOC”网络, 网络,需先恢复出厂设置, 需先恢复出厂设置,具体查看 1.2
恢复出厂设置模式
5) 在电脑上选中“ 在电脑上选中“ShiXun_ADHOC”网络, 网络,输入密码“ 输入密码“1234567890123”然后 选择连接。 选择连接。 6) 然后等待, 然后等待,这个过程有点长, 这个过程有点长,几十秒甚至 几十秒甚至 1 分多钟。 分多钟。 7) 等 wifi 模块旁边的 D6(LED)指示常亮 指示常亮了 常亮了,说明网络连接上了。 说明网络连接上了。说明板子工 作正常。 作正常。如下所示
Rev 0.32
Confidential Copyright@2014 by Shixun Electronic Inc
-
1-

STM32F407学习资料

使用心得: STM32F4与STM32F1在ADC方面的区别: 通常,在STM32F1中需要加自动校准的程序,如下: // 使能ADC1自动校准功能 ADC_ResetCalibration(ADC1); //检查ADC1自校准的状态位 while(ADC_GetResetCalibrationStatus(ADC1)); //启动ADC1自校准 ADC_StartCalibration(ADC1); //检查ADC1自校准是否结束 while(ADC_GetCalibrationStatus(ADC1)); // ADC自动校准结束--------------- 然而,STM32F4中无需此程序,给出STM32F407的ADC3和DMA方式的官方程序如下:/** ****************************************************************************** * @file ADC3_DMA/main.c * @author MCD Application Team * @version V1.0.0 * @date 19-September-2011 * @brief Main program body ****************************************************************************** * @attention * * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS A T PROVIDING CUSTOMERS * WITH CODING INFORMA TION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SA VE * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY

STM32核心板

STM32F407VET6 Mini最小系统 产品简介: 这是一款基于STM32F407VET6为主芯片的ARM核心板,有如下特点: 1、板载了基于MCU的最基本电路,如晶振电路、USB电源管理电路和USB接口等。 2、核心板引出了所有的I/O口资源。 3、带有SWD仿真调试下载接口,该接口最少需要3根线就可以完成调试下载任务,相比传统的JTAG调试有不少的好处,在这里插一句,JTAG现在大有要淘汰的趋势,例如ST 新出的M0系列的MCU只保留了SWD调试接口,JTAG直接取消了。 4、使用了目前智能手机所使用的Mirco USB接口,使用方便,可做USB通讯和供电。 5、核心板的系统晶振(25MHz)使用精度极高质量上乘低负载NDK公司的NX5032GA,而没有使用价格低廉的铁壳晶振。 6、针对STM32 RTC不起振的问题,我们采用了官方建议的低负载RTC晶振方案,并使用了爱普生品牌的晶振,而没有使用廉价的圆柱晶振。 7、核心板配有EEPROM,型号为AT24C08方便核心板进行数据存储。 8、电源稳压芯片采用的是rf级别的LDO为MCU的运行提供了良好的供电环境。 9、配有相应的优质2.54mm间距的双排排针,确保导电接触优良,方便用户将核心板放置到标准的的万用板或者面包板上。排针默认不焊接,用户可以根据自己的需要选择焊接方向。

资源简介: 有客户反映使用我们家STM32F407VET6\STM32F407ZGT6核心板,下载网上收集的程序后不能再次下载或运行也不是正常现象,这有可能是下载的程序时钟没有与我们核心板上的晶振进行匹配,例如有客户使用我们的407核心板下载了正点原子例程发现无法再次下载,是因为原子哥写的程序大部分运行在外部8M晶振上的,而我们晶振是25M.需要在程序方面稍微修改过几个地方就可以做到程序兼容,不必费劲修改过硬件晶振。 以下是修改以8M外部晶振编写程序改为适合外部晶振为25M修改方法。 修改的地方之一:stm32f4xx.h里面找到HSE_VALUE,具体#define HSE_VALUE ((uint32_t)8000000) ,现把它修改为#define HSE_VALUE ((uint32_t)25000000) (实际晶振对应的批量) 修改的地方之二:系统通过PLL倍频到168M,所以在配置PLL的时候,也需要作相应的修改。在system_stm32f4xx.c里,的配置为以下: #define PLL_M 8 需要把PLL_M由8修改为25(实际晶振频率对应数值),不然会超频到336M的主频,使STM32不能正常工作,常见表现为掉进HardFault_Handler()中。 其他晶振皆可以参考上述方法进行相应修改。 芯片简介: 1、STM32F407VET6 封装类型:LQFP; 引脚个数:100; 内核:Cortex?-M4;

学习STM32之SD卡总结

由于自己也在使用SD卡,使用的过程中也遇到了一些问题,下面是在EDN论坛上zxb1717高手的经验,希望可以帮助大家 调试关键点: 1. 上电时要延时足够长的时间给SD卡一个准备过程,在我的程序里是5秒,根据不同的卡设置不同的延时时间。SD卡初始化第一步在发送CMD命令之前,在片选有效的情况下首先要发送至少74个时钟,否则将有可能出现SD卡不能初始化的问题。 2. SD卡发送复位命令CMD0后,要发送版本查询命令CMD8,返回状态一般分两种,若返回0x01表示此SD卡接受CMD8,也就是说此SD卡支持版本2;若返回0x05则表示此SD卡支持版本1。因为不同版本的SD卡操作要求有不一样的地方,所以务必查询SD卡的版本号,否则也会出现SD卡无法正常工作的问题。 3. 理论上要求发送CMD58获得SD卡电压参数,但实际过程中由于事先都知道了SD卡的工作电压,因此可省略这一步简化程序。协议书上也建议尽量不要用这个命令。 4. SD卡读写超时时间要按照协议说明书书上的给定值(读超时:100ms;写超时:250ms),这个值要在程序中准确计算出来,否则将会出现不能正常读写数据的问题。我自己定义了一个计算公式:超时时间=(8/clk)*arg。 5. 2GB以内的SD卡(标准卡)和2GB以上的SD卡(大容量卡)在地址访问形式上不同,这一点尤其要注意,否则将会出现无法读写数据的问题。如标准卡在读写操作时,对读或写命令令牌当中的地址域符初值0x10,表示对第16个字节以后的地址单元进行操作(前提是此SD卡支持偏移读写操作),而对大容量卡读或写命令令牌当中的地址域符初值0x10时,则表示对第16块进行读写操作,而且大容量卡只支持块读写操作,块大小固定为512字节,对其进行字节操作将会出错。 6. 对某一块要进行写操作时最好先执行擦出命令,这样写入的速度就能大大提高。进行擦除操作时不管是标准卡还是大容量卡都按块操作执行,也就是一次擦除至少512字节。 7. 对标准卡进行字节操作时,起始和终止必须在一个物理扇区内,否则将不能进行读写操作。实际操作过程中建议用块操作以提高效率。不管是标准卡还是大容量卡一个读写命令只能对一个块进行操作,不允许跨物理层地址操作。 8. 在写数据块前要先写入若干个dummy data字节,写完一个块数据时,主机要监测MISO数据线,如果从机处于忙状态这根数据线会保持低电平,这样主机就可以根据这根数据线的状态以决定是否发送下一个命令,在从机没有释放MISO数据线之前,主机绝对不能执行其他命令,否则将会导致写入的数据出错,而且从机也不会响应主机的命令。 9. 在SPI模式下,CRC校验是被忽略的,但依然要求主从机发送CRC码,只是数值可以是任意值,一般主机的CRC码通常设为0x00或0xFF。 读多块操作和写多块操作的传输停止形式不一样,读多块操作时用用命令CMD12终止传输,而写多块操作时用Stop Tran Token(停止传输令牌,值为0xFD)终止传输。

STM32的学习心得之RCC(时钟)

从51单片机转到STM32单片机有点困难,很多理解都停留在51的概念上,对STM32单片机学习需要重新认识,比如RTC...... RTC是STM32单片机的脉搏,是单片机的驱动源。使用任何一个外设都必须打开相应的时钟。这样的好处就是,如果不使用一个外设的时候,就把它的时钟关掉,从而可以降低系统的功耗,达到节能,实现低功耗的效果。 STM32单片机的时钟可以由以下3个时钟源提供: 1、HSI:高速内部时钟信号 stm32单片机内带的时钟 (8M频率) 精度较差 2、HSE:高速外部时钟信号精度高来源(1)HSE外部晶体/陶瓷谐振器(晶振) (2)HSE用户外部时钟 3、LSE:低速外部晶体 32.768kHz 主要提供一个精确的时钟源一般作为RTC时钟使用 stm32单片机的将时钟信号(例如HSE)经过分频或倍频(PLL)后,得到系统时钟,系统时钟经过分频,产生外设所使用的时钟。 本文有个图,可以直观的浏览单片机整个时钟架构。 了解stm32单片机的时钟,下面就是如何使用,我举个使用HSE时钟的例子。 设置时钟流程: 1、将RCC寄存器重新设置为默认值RCC_DeInit 2、打开外部高速时钟晶振HSE RCC_HSEConfig(RCC_HSE_ON); 3、等待外部高速时钟晶振工作HSEStartUpStatus = RCC_WaitForHSEStartUp(); 4、设置AHB时钟RCC_HCLKConfig; 5、设置高速AHB时钟RCC_PCLK2Config; 6、设置低速速AHB时钟RCC_PCLK1Config 7、设置PLL RCC_PLLConfig 8、打开PLL RCC_PLLCmd(ENABLE); 9、等待PLL工作while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) 10、设置系统时钟RCC_SYSCLKConfig 11、判断是否PLL是系统时钟while(RCC_GetSYSCLKSource() != 0x08) 12、打开要使用的外设时钟RCC_APB2PeriphClockCmd()/RCC_APB1PeriphClockCmd()

MINI_STM32用户手册(先看这里)

MINI-STM32 超牛组合学习套装用户手册 MINI-STM32 超牛组合学习套装 用户手册 https://www.sodocs.net/doc/f68891499.html, CopyRight@2009

MINI-STM32 超牛组合学习套装用户手册 第一章、产品简介 1.1、MINI-STM32超牛组合学习套装简介 MINI-STM32超牛组合学习套装是https://www.sodocs.net/doc/f68891499.html, 为初学者学习STM32 Cortex M3 系列ARM 而设计的学习套件。MINI-STM32超牛组合学习套装采用STM32F103RBT6作为核心MCU ,并外接了2.8寸彩色TFT 屏模块、UART 、USB 、ADC 电压调节、按键等硬件接口,结合目前最流行的JLINK V7仿真器和RealView MDK(Keil uVision3 )集成开发环境,构成初学者学习入门、硬件设计参考、软件编程调试的学习平台,配合本手册可以迅速帮你掌握嵌入式系统的开发流程。 1.2、MINI-STM32 开发板外观 MINI_STM32开发板硬件图 1.3、MINI-STM32 特性 CPU :标配STM32F103RBT6,ARM Cortex-M3内核,128kB Flash, 20KB RAM (默认配置) 高配STM32F103RCT6 ARM Cortex-M3内核,256kB Flash, 48KB RAM (用户可选) 最高工作时钟72MHz,64脚,同时可更换更高配置的CPU USB 接口,可以做USB 实验 RS232(ISP 下载)包括串口电平转换芯片MAX3232,可做RS232通信实验 标准ARM JTAG 20仿真下载接口

相关主题