发新帖我要提问
12
返回列表
打印
[应用相关]

stm32f10x.h解析

[复制链接]
楼主: 和下土
手机看帖
扫描二维码
随时随地手机跟帖
21
和下土|  楼主 | 2021-5-21 14:07 | 只看该作者 回帖奖励 |倒序浏览
ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt /
USB_HP_CAN1_TX_IRQn = 19, /!< USB Device High Priority or CAN1 TX Interrupts /
USB_LP_CAN1_RX0_IRQn = 20, /!< USB Device Low Priority or CAN1 RX0 Interrupts /
CAN1_RX1_IRQn = 21, /!< CAN1 RX1 Interrupt /
CAN1_SCE_IRQn = 22, /!< CAN1 SCE Interrupt /
EXTI9_5_IRQn = 23, /!< External Line[9:5] Interrupts /
TIM1_BRK_IRQn = 24, /!< TIM1 Break Interrupt /
TIM1_UP_IRQn = 25, /!< TIM1 Update Interrupt /
TIM1_TRG_COM_IRQn = 26, /!< TIM1 Trigger and Commutation Interrupt /
TIM1_CC_IRQn = 27, /!< TIM1 Capture Compare Interrupt /
TIM2_IRQn = 28, /!< TIM2 global Interrupt /
TIM3_IRQn = 29, /!< TIM3 global Interrupt /
TIM4_IRQn = 30, /!< TIM4 global Interrupt /
I2C1_EV_IRQn = 31, /!< I2C1 Event Interrupt /
I2C1_ER_IRQn = 32, /!< I2C1 Error Interrupt /
I2C2_EV_IRQn = 33, /!< I2C2 Event Interrupt /
I2C2_ER_IRQn = 34, /!< I2C2 Error Interrupt /
SPI1_IRQn = 35, /!< SPI1 global Interrupt /
SPI2_IRQn = 36, /!< SPI2 global Interrupt /
USART1_IRQn = 37, /!< USART1 global Interrupt /
USART2_IRQn = 38, /!< USART2 global Interrupt /
USART3_IRQn = 39, /!< USART3 global Interrupt /
EXTI15_10_IRQn = 40, /!< External Line[15:10] Interrupts /
RTCAlarm_IRQn = 41, /!< RTC Alarm through EXTI Line Interrupt /
USBWakeUp_IRQn = 42 /!< USB Device WakeUp from suspend through EXTI Line Interrupt /
#endif / STM32F10X_MD */

使用特权

评论回复
22
和下土|  楼主 | 2021-5-21 14:09 | 只看该作者
#ifdef STM32F10X_MD_VL這是我們前面講過的不同的芯片型號,對應 著不同的中斷級別。請大家自行研究!
ADC1_IRQn = 18, /*!< ADC1 global Interrupt /
EXTI9_5_IRQn = 23, /!< External Line[9:5] Interrupts /
TIM1_BRK_TIM15_IRQn = 24, /!< TIM1 Break and TIM15 Interrupts /
TIM1_UP_TIM16_IRQn = 25, /!< TIM1 Update and TIM16 Interrupts /
TIM1_TRG_COM_TIM17_IRQn = 26, /!< TIM1 Trigger and Commutation and TIM17 Interrupt /
TIM1_CC_IRQn = 27, /!< TIM1 Capture Compare Interrupt /
TIM2_IRQn = 28, /!< TIM2 global Interrupt /
TIM3_IRQn = 29, /!< TIM3 global Interrupt /
TIM4_IRQn = 30, /!< TIM4 global Interrupt /
I2C1_EV_IRQn = 31, /!< I2C1 Event Interrupt /
I2C1_ER_IRQn = 32, /!< I2C1 Error Interrupt /
I2C2_EV_IRQn = 33, /!< I2C2 Event Interrupt /
I2C2_ER_IRQn = 34, /!< I2C2 Error Interrupt /
SPI1_IRQn = 35, /!< SPI1 global Interrupt /
SPI2_IRQn = 36, /!< SPI2 global Interrupt /
USART1_IRQn = 37, /!< USART1 global Interrupt /
USART2_IRQn = 38, /!< USART2 global Interrupt /
USART3_IRQn = 39, /!< USART3 global Interrupt /
EXTI15_10_IRQn = 40, /!< External Line[15:10] Interrupts /
RTCAlarm_IRQn = 41, /!< RTC Alarm through EXTI Line Interrupt /
CEC_IRQn = 42, /!< HDMI-CEC Interrupt /
TIM6_DAC_IRQn = 54, /!< TIM6 and DAC underrun Interrupt /
TIM7_IRQn = 55 /!< TIM7 Interrupt /
#endif / STM32F10X_MD_VL */

使用特权

评论回复
23
和下土|  楼主 | 2021-5-21 14:10 | 只看该作者
系统异常ID:

标号
中断ID
描述
NonMaskableInt_IRQn
-14
不可屏蔽中断
MemoryManagement_IRQn
-12
Cortex-M3内存管理中断
BusFault_IRQn
-11
Cortex-M3 总线Fault中断
UsageFault_IRQn
-10
Cortex-M3 用法Fault 中断
SVCall_IRQn
-5
Cortex-M3 SV Call中断
DebugMonitor_IRQn
-4
Cortex-M3 调试监视中断
PendSV_IRQn
-2
Cortex-M3 Pend SV中断
SysTick_IRQn
-1
Cortex-M3 系统Tick中断

使用特权

评论回复
24
和下土|  楼主 | 2021-5-21 14:11 | 只看该作者
外设中断ID:
标号 中断ID 描述 标号 中断ID 描述
WDT_IRQn 0 看门狗 EINT3_IRQn 21 外中断3
TIMER0_IRQn 1 定时器0 ADC_IRQn 22 AD转换
TIMER1_IRQn 2 定时器1 BOD_IRQn 23 欠压检测
TIMER2_IRQn 3 定时器2 USB_IRQn 24 USB
TIMER3_IRQn 4 定时器3 CAN_IRQn 25 CAN
UART0_IRQn 5 UART0 DMA_IRQn 26 通用DMA
UART1_IRQn 6 UART1 I2S_IRQn 27 I2S
UART2_IRQn 7 UART2 ENET_IRQn 28 以太网
UART3_IRQn 8 UART3 MCI_IRQn 29 SD/MMC卡I/F
PWM1_IRQn 9 PWM1 MCPWM_IRQn 30 电机控制PWM
I2C0_IRQn 10 I2C0 QEI_IRQn 31 正交编码接口
I2C1_IRQn 11 I2C1 PLL1_IRQn 32 PLL1锁存
I2C2_IRQn 12 I2C2 USBActivity_IRQn 33 USB活动
Reserved0_IRQn 13 保留 CANActivity_IRQn 34 CAN活动
SSP0_IRQn 14 SSP0 UART4_IRQn 35 UART4
SSP1_IRQn 15 SSP1 SSP2_IRQn 36 SSP2
PLL0_IRQn 16 PLL0锁存 LCD_IRQn 37 LCD
RTC_IRQn 17 RTC GPIO_IRQn 38 GPIO
EINT0_IRQn 18 外中断0 PWM0_IRQn 39 PWM0
EINT1_IRQn 19 外中断1 EEPROM_IRQn 40 EEPROM
EINT2_IRQn 20 外中断2
#ifdef STM32F10X_HD 這是我們前面講過的不同的芯片型號,對應 著不同的中斷級別。請大家自行研究!
ADC1_2_IRQn = 18, /*!< ADC1 and ADC2 global Interrupt /
USB_HP_CAN1_TX_IRQn = 19, /!< USB Device High Priority or CAN1 TX Interrupts /
USB_LP_CAN1_RX0_IRQn = 20, /!< USB Device Low Priority or CAN1 RX0 Interrupts /
CAN1_RX1_IRQn = 21, /!< CAN1 RX1 Interrupt /
CAN1_SCE_IRQn = 22, /!< CAN1 SCE Interrupt /
EXTI9_5_IRQn = 23, /!< External Line[9:5] Interrupts /
TIM1_BRK_IRQn = 24, /!< TIM1 Break Interrupt /
TIM1_UP_IRQn = 25, /!< TIM1 Update Interrupt /
TIM1_TRG_COM_IRQn = 26, /!< TIM1 Trigger and Commutation Interrupt /
TIM1_CC_IRQn = 27, /!< TIM1 Capture Compare Interrupt /
TIM2_IRQn = 28, /!< TIM2 global Interrupt /
TIM3_IRQn = 29, /!< TIM3 global Interrupt /
TIM4_IRQn = 30, /!< TIM4 global Interrupt /
I2C1_EV_IRQn = 31, /!< I2C1 Event Interrupt /
I2C1_ER_IRQn = 32, /!< I2C1 Error Interrupt /
I2C2_EV_IRQn = 33, /!< I2C2 Event Interrupt /
I2C2_ER_IRQn = 34, /!< I2C2 Error Interrupt /
SPI1_IRQn = 35, /!< SPI1 global Interrupt /
SPI2_IRQn = 36, /!< SPI2 global Interrupt /
USART1_IRQn = 37, /!< USART1 global Interrupt /
USART2_IRQn = 38, /!< USART2 global Interrupt /
USART3_IRQn = 39, /!< USART3 global Interrupt /
EXTI15_10_IRQn = 40, /!< External Line[15:10] Interrupts /
RTCAlarm_IRQn = 41, /!< RTC Alarm through EXTI Line Interrupt /
USBWakeUp_IRQn = 42, /!< USB Device WakeUp from suspend through EXTI Line Interrupt /
TIM8_BRK_IRQn = 43, /!< TIM8 Break Interrupt /
TIM8_UP_IRQn = 44, /!< TIM8 Update Interrupt /
TIM8_TRG_COM_IRQn = 45, /!< TIM8 Trigger and Commutation Interrupt /
TIM8_CC_IRQn = 46, /!< TIM8 Capture Compare Interrupt /
ADC3_IRQn = 47, /!< ADC3 global Interrupt /
FSMC_IRQn = 48, /!< FSMC global Interrupt /
SDIO_IRQn = 49, /!< SDIO global Interrupt /
TIM5_IRQn = 50, /!< TIM5 global Interrupt /
SPI3_IRQn = 51, /!< SPI3 global Interrupt /
UART4_IRQn = 52, /!< UART4 global Interrupt /
UART5_IRQn = 53, /!< UART5 global Interrupt /
TIM6_IRQn = 54, /!< TIM6 global Interrupt /
TIM7_IRQn = 55, /!< TIM7 global Interrupt /
DMA2_Channel1_IRQn = 56, /!< DMA2 Channel 1 global Interrupt /
DMA2_Channel2_IRQn = 57, /!< DMA2 Channel 2 global Interrupt /
DMA2_Channel3_IRQn = 58, /!< DMA2 Channel 3 global Interrupt /
DMA2_Channel4_5_IRQn = 59 /!< DMA2 Channel 4 and Channel 5 global Interrupt /
#endif / STM32F10X_HD */

使用特权

评论回复
25
和下土|  楼主 | 2021-5-21 14:13 | 只看该作者
#include "core_cm3.h"STM32的内核是ARM CORTEX-M3,这个core_cm3.h包含的是一些内核相关的函数和宏定义,例如核内寄存器定义、部分核内外设的地址等等,其对应的是core_cm3.c文件。初学可以不管他,只要把它包含进工程里就行了,这里都是非常底层的函数,上层的一些函数直接调用它们了。如果对CORTEX-M3内核有兴趣或者基础较高,想深入了解这些函数,可以仔细研读一下,我们在后续的开讲中会仔细讲解这一个文件的内容。
#include "system_stm32f10x.h"这个文件就是我们现在所讲的文件了。
#include <stdint.h><stdint.h> 定义了 int16_t 、 uint32_t 、 int64_t 等整型,在需要确定大小的整型时可以使用它们代替 short 、 unsigned long long 等,在 C 整型中,只使用 int 。

/** @addtogroup Exported_types

使用特权

评论回复
26
和下土|  楼主 | 2021-5-21 14:14 | 只看该作者
@{
*/
/*!< STM32F10x Standard Peripheral Library old types (maintained for legacy purpose) */由于新的文件与老的文件会有不兼容问题,所以要转换变量类型。
typedef int32_t s32; typedef 在计算机编程语言中用来为复杂的声明定义简单的别名,与宏定义有些差异。它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。
《变量类型》,3.0以后的版本中使用了CMSIS数据类型,变量的定义有所不同,但是出于兼容旧版本的目的,以上的数据类型仍然兼容。
CMSIS IO类型限定词
IO类限定词
#define
描述
_I
volatile const
只读访问
_O
volatile
只写访问
_IO
volatile
读和写访问
件库与CMSIS数据类型对比
固件库类型
CMSIS类型
描述
s32
int32_t
易挥发只读有符号32位数据
s16
int16_t
易挥发只读有符号16位数据
s8
int8_t
易挥发只读有符号8位数据
sc32
const int32_t
只读有符号32位数据
sc16
const int16_t
只读有符号16位数据
sc8
const int8_t
只读有符号8位数据
vs32
_IO int32_t
易挥发读写访问有符号32位数据
vs16
_IO int16_t
易挥发读写访问有符号16位数据
vs8
_IO int8_t
易挥发读写访问有符号8位数据
vsc32
_I int32_t
易挥发只读有符号32位数据
vsc16
_I int16_t
易挥发只读有符号16位数据
vsc8
_I int8_t
易挥发只读有符号8位数据
u32
uint32_t
无符号32位数据
u16
uint16_t
无符号16位数据
u8
uint8_t
无符号8位数据
uc32
const uint32_t
只读无符号32位数据
uc16
const uint16_t
只读无符号16位数据
uc8
const uint8_t
只读无符号8位数据
vu32
_IO uint32_t
易挥发读写访问无符号32位数据
vu16
_IO uint16_t
易挥发读写访问无符号16位数据
vu8
_IO uint8_t
易挥发读写访问无符号8位数据
vuc32
_I uint32_t
易挥发只读无符号32位数据
vuc16
_I uint16_t
易挥发只读无符号16位数据
vuc8
_I uint8_t
易挥发只读无符号8位数据

使用特权

评论回复
27
和下土|  楼主 | 2021-5-21 14:15 | 只看该作者
stm32f10x.h文件中还包含了常用的布尔形变量定义,如:
1 typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
2
3 typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
4
5 #define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))
6
7 typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;
不同版本的标准外设库的变量定义略有不同,如3.4版本中就没有之前版本的TRUE和FALSE的定义,用户也可以根据自己的需求按照上面的格式定义自己的布尔形变量。在使用标准外设库进行开发遇到相关的定义问题时应首先找到对应的头文件定义。

使用特权

评论回复
28
和下土|  楼主 | 2021-5-21 14:17 | 只看该作者
typedef int16_t s16;
typedef int8_t s8;
typedef const int32_t sc32; /*!< Read Only /
const是一个C语言的关键字,它限定一个变量不允许被改变。使用const在一定程度上可以提高程序的安全性和可靠性。另外,在观看别人代码的时候,清晰理解const所起的作用,对理解对方的程序也有一些帮助。另外CONST在其他编程语言中也有出现,如C++、PHP5、C#.net、HC08 C。
typedef const int16_t sc16; /!< Read Only /
typedef const int8_t sc8; /!< Read Only */

typedef __IO int32_t vs32;
typedef __IO int16_t vs16;
typedef __IO int8_t vs8;

typedef __I int32_t vsc32; /*!< Read Only /
typedef __I int16_t vsc16; /!< Read Only /
typedef __I int8_t vsc8; /!< Read Only */

typedef uint32_t u32;
typedef uint16_t u16;
typedef uint8_t u8;

typedef const uint32_t uc32; /*!< Read Only /
typedef const uint16_t uc16; /!< Read Only /
typedef const uint8_t uc8; /!< Read Only */

typedef __IO uint32_t vu32;
typedef __IO uint16_t vu16;
typedef __IO uint8_t vu8;

typedef __I uint32_t vuc32; /*!< Read Only /
typedef __I uint16_t vuc16; /!< Read Only /
typedef __I uint8_t vuc8; /!< Read Only */

typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;

typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))

typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;

/*!< STM32F10x Standard Peripheral Library old definitions (maintained for legacy purpose) /
由于新的文件与老的文件会有不兼容问题,所以要转换变量类型。
#define HSEStartUp_TimeOut HSE_STARTUP_TIMEOUT 请大家注意这里的定义,高速外设时钟的启动时间。
#define HSE_Value HSE_VALUE
#define HSI_Value HSI_VALUE
/*

使用特权

评论回复
29
和下土|  楼主 | 2021-5-21 14:18 | 只看该作者
@}
*/
/** @addtogroup Peripheral_registers_structures

@{
*/
/**

@brief Analog to Digital Converter
*/
typedef struct ADC_TypeDef结构体的声名,看看它内部都有哪些内容。请读者注意。
ADC_TypeDef,看起来是一个结构类型,是对ADC寄存器各地址的一个定义。
{__IO就是volatileuint32_t就是32位无符号整形数。
这都是ARM公司无聊滴在CMSIS库里面定义的。STM32库1.x 2.x都没有这玩意,到了3.0以后引入了CMSIS就有了。 __IO uint32_t SR;
__IO uint32_t CR1;
__IO uint32_t CR2;
__IO uint32_t SMPR1;
__IO uint32_t SMPR2;
__IO uint32_t JOFR1;
__IO uint32_t JOFR2;
__IO uint32_t JOFR3;
__IO uint32_t JOFR4;
__IO uint32_t HTR;
__IO uint32_t LTR;
__IO uint32_t SQR1;
__IO uint32_t SQR2;
__IO uint32_t SQR3;
__IO uint32_t JSQR;
__IO uint32_t JDR1;
__IO uint32_t JDR2;
__IO uint32_t JDR3;
__IO uint32_t JDR4;
__IO uint32_t DR;
} ADC_TypeDef;

/**

使用特权

评论回复
30
和下土|  楼主 | 2021-5-21 14:18 | 只看该作者
@brief Backup Registers
*/
typedef struct 这个结构体声明的是数据备份寄存器,它们是16位的。它可以管理防范入侵,可以存储RTC检验值,可以做数据备份。
{
uint32_t RESERVED0;
__IO uint16_t DR1; DR代表数据备份1—45
uint16_t RESERVED1;
__IO uint16_t DR2;
uint16_t RESERVED2;
__IO uint16_t DR3;
uint16_t RESERVED3;
__IO uint16_t DR4;
uint16_t RESERVED4;
__IO uint16_t DR5;
uint16_t RESERVED5;
__IO uint16_t DR6;
uint16_t RESERVED6;
__IO uint16_t DR7;
uint16_t RESERVED7;
__IO uint16_t DR8;
uint16_t RESERVED8;
__IO uint16_t DR9;
uint16_t RESERVED9;
__IO uint16_t DR10;
uint16_t RESERVED10;
__IO uint16_t RTCCR; RTC时钟校准寄存器
uint16_t RESERVED11;
__IO uint16_t CR; CR备份控制寄存器
uint16_t RESERVED12;
__IO uint16_t CSR; CSR 备份控制状态寄存器
uint16_t RESERVED13[5];
__IO uint16_t DR11;
uint16_t RESERVED14;
__IO uint16_t DR12;
uint16_t RESERVED15;
__IO uint16_t DR13;
uint16_t RESERVED16;
__IO uint16_t DR14;
uint16_t RESERVED17;
__IO uint16_t DR15;
uint16_t RESERVED18;
__IO uint16_t DR16;
uint16_t RESERVED19;
__IO uint16_t DR17;
uint16_t RESERVED20;
__IO uint16_t DR18;
uint16_t RESERVED21;
__IO uint16_t DR19;
uint16_t RESERVED22;
__IO uint16_t DR20;
uint16_t RESERVED23;
__IO uint16_t DR21;
uint16_t RESERVED24;
__IO uint16_t DR22;
uint16_t RESERVED25;
__IO uint16_t DR23;
uint16_t RESERVED26;
__IO uint16_t DR24;
uint16_t RESERVED27;
__IO uint16_t DR25;
uint16_t RESERVED28;
__IO uint16_t DR26;
uint16_t RESERVED29;
__IO uint16_t DR27;
uint16_t RESERVED30;
__IO uint16_t DR28;
uint16_t RESERVED31;
__IO uint16_t DR29;
uint16_t RESERVED32;
__IO uint16_t DR30;
uint16_t RESERVED33;
__IO uint16_t DR31;
uint16_t RESERVED34;
__IO uint16_t DR32;
uint16_t RESERVED35;
__IO uint16_t DR33;
uint16_t RESERVED36;
__IO uint16_t DR34;
uint16_t RESERVED37;
__IO uint16_t DR35;
uint16_t RESERVED38;
__IO uint16_t DR36;
uint16_t RESERVED39;
__IO uint16_t DR37;
uint16_t RESERVED40;
__IO uint16_t DR38;
uint16_t RESERVED41;
__IO uint16_t DR39;
uint16_t RESERVED42;
__IO uint16_t DR40;
uint16_t RESERVED43;
__IO uint16_t DR41;
uint16_t RESERVED44;
__IO uint16_t DR42;
uint16_t RESERVED45;
} BKP_TypeDef;

/**

使用特权

评论回复
31
和下土|  楼主 | 2021-5-21 14:21 | 只看该作者
@brief Controller Area Network TxMailBox
*/
typedef struct
{
__IO uint32_t TIR;
__IO uint32_t TDTR;
__IO uint32_t TDLR;
__IO uint32_t TDHR;
} CAN_TxMailBox_TypeDef; CAN的发送邮箱寄存器的结构体定义。

/**

使用特权

评论回复
32
和下土|  楼主 | 2021-5-21 14:27 | 只看该作者
@brief Controller Area Network FIFOMailBox
*/
typedef struct
{
__IO uint32_t RIR;
__IO uint32_t RDTR;
__IO uint32_t RDLR;
__IO uint32_t RDHR;
} CAN_FIFOMailBox_TypeDef;先进先出(FIFO)缓冲器,是一种寄存器。在这个头文件里定义了它的结构体类型。

/**

@brief Controller Area Network FilterRegister
*/
typedef struct
{
__IO uint32_t FR1;
__IO uint32_t FR2;
}CAN_Filter Register_TypeDef;CAN硬件过滤器工作模式、访问码和访问码掩码。
通过设置CAN过滤器,可以使CAN端口只接收符合规定的的CAN数据包,这样就能将CAN总线划分成若干网段用于支持不同应用。

/**

使用特权

评论回复
33
和下土|  楼主 | 2021-5-21 14:29 | 只看该作者
@brief Controller Area Network
*/
typedef struct
{
__IO uint32_t MCR;
__IO uint32_t MSR;
__IO uint32_t TSR;
__IO uint32_t RF0R;
__IO uint32_t RF1R;
__IO uint32_t IER;
__IO uint32_t ESR;
__IO uint32_t BTR;
uint32_t RESERVED0[88];
CAN_TxMailBox_TypeDef sTxMailBox[3];
CAN_FIFOMailBox_TypeDef sFIFOMailBox[2];
uint32_t RESERVED1[12];
__IO uint32_t FMR;
__IO uint32_t FM1R;
uint32_t RESERVED2;
__IO uint32_t FS1R;
uint32_t RESERVED3;
__IO uint32_t FFA1R;
uint32_t RESERVED4;
__IO uint32_t FA1R;
uint32_t RESERVED5[8];
#ifndef STM32F10X_CL
CAN_FilterRegister_TypeDef sFilterRegister[14];
#else
CAN_FilterRegister_TypeDef sFilterRegister[28];
#endif /* STM32F10X_CL */
} CAN_TypeDef;

/**

@brief Consumer Electronics Control (CEC)
*/
typedef struct
{
__IO uint32_t CFGR;
__IO uint32_t OAR;
__IO uint32_t PRES;
__IO uint32_t ESR;
__IO uint32_t CSR;
__IO uint32_t TXD;
__IO uint32_t RXD;
} CEC_TypeDef; CEC用于记录CAN总线发送数据错误的计数器
/**

@brief CRC calculation unit
*/
typedef struct
{
__IO uint32_t DR;
__IO uint8_t IDR;
uint8_t RESERVED0;
uint16_t RESERVED1;
__IO uint32_t CR;
} CRC_TypeDe CRC校验

/**

@brief Digital to Analog Converter 数模转换相应的结构体,DAC相关寄存器啊
*/
typedef struct
{
__IO uint32_t CR;
__IO uint32_t SWTRIGR; SWTRIGR 这个DAC软件触发寄存器
__IO uint32_t DHR12R1; DAC 通道 1 的 12 位右对齐数据保持寄存器:DAC_DHR12R1。这个我只讲一个,这里面全部是关于DAC转换的相关寄存器。请大家自行对照硬件手册查找。
__IO uint32_t DHR12L1;
__IO uint32_t DHR8R1;
__IO uint32_t DHR12R2;
__IO uint32_t DHR12L2;
__IO uint32_t DHR8R2;
__IO uint32_t DHR12RD;
__IO uint32_t DHR12LD;
__IO uint32_t DHR8RD;
__IO uint32_t DOR1;
__IO uint32_t DOR2;
#if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL)
__IO uint32_t SR;
#endif
} DAC_TypeDef;
/**

使用特权

评论回复
34
和下土|  楼主 | 2021-5-21 14:31 | 只看该作者
@brief DMA Controller
DMA 传输将数据从一个地址空间复制到另外一个地址空间。当CPU 初始化这个传输动作,传输动作本身是由 DMA 控制器来实行和完成。典型的例子就是移动一个外部内存的区块到芯片内部更快的内存区。像是这样的操作并没有让处理器工作拖延,反而可以被重新排程去处理其他的工作。DMA 传输对于高效能 嵌入式系统算法和网络是很重要的。
DMA
在实现DMA传输时,是由DMA控制器直接掌管总线,因此,存在着一个总线控制权转移问题。即DMA传输前,CPU要把总线控制权交给DMA控制器,而在结束DMA传输后,DMA控制器应立即把总线控制权再交回给CPU。一个完整的DMA传输过程必须经过DMA请求、DMA响应、DMA传输、DMA结束4个步骤。
*/

typedef struct 这里就是直接内存寻址寄存器相关定义,我想DMA大家应该不是太陌生。
{
__IO uint32_t CCR;
__IO uint32_t CNDTR;
__IO uint32_t CPAR;
__IO uint32_t CMAR;
} DMA_Channel_TypeDef;

typedef struct
{
__IO uint32_t ISR;
__IO uint32_t IFCR;
} DMA_TypeDef;

/**

使用特权

评论回复
35
和下土|  楼主 | 2021-5-21 14:33 | 只看该作者
@brief Ethernet MAC
*/ MAC(Medium Access Control)模块,实现符合 IEEE 802.3 标准的 MAC 逻辑。 这个结构体是网络模块的相关定义。
typedef struct
{
__IO uint32_t MACCR;
__IO uint32_t MACFFR;
__IO uint32_t MACHTHR;
__IO uint32_t MACHTLR;
__IO uint32_t MACMIIAR;
__IO uint32_t MACMIIDR;
__IO uint32_t MACFCR;
__IO uint32_t MACVLANTR; /* 8 /
uint32_t RESERVED0[2];
__IO uint32_t MACRWUFFR; / 11 /
__IO uint32_t MACPMTCSR;
uint32_t RESERVED1[2];
__IO uint32_t MACSR; / 15 /
__IO uint32_t MACIMR;
__IO uint32_t MACA0HR;
__IO uint32_t MACA0LR;
__IO uint32_t MACA1HR;
__IO uint32_t MACA1LR;
__IO uint32_t MACA2HR;
__IO uint32_t MACA2LR;
__IO uint32_t MACA3HR;
__IO uint32_t MACA3LR; / 24 /
uint32_t RESERVED2[40];
__IO uint32_t MMCCR; / 65 /
__IO uint32_t MMCRIR;
__IO uint32_t MMCTIR;
__IO uint32_t MMCRIMR;
__IO uint32_t MMCTIMR; / 69 /
uint32_t RESERVED3[14];
__IO uint32_t MMCTGFSCCR; / 84 */
__IO uint32_t MMCTGFMSCCR;
uint32_t RESERVED4[5];
__IO uint32_t MMCTGFCR;
uint32_t RESERVED5[10];
__IO uint32_t MMCRFCECR;
__IO uint32_t MMCRFAECR;
uint32_t RESERVED6[10];
__IO uint32_t MMCRGUFCR;
uint32_t RESERVED7[334];
__IO uint32_t PTPTSCR;
__IO uint32_t PTPSSIR;
__IO uint32_t PTPTSHR;
__IO uint32_t PTPTSLR;
__IO uint32_t PTPTSHUR;
__IO uint32_t PTPTSLUR;
__IO uint32_t PTPTSAR;
__IO uint32_t PTPTTHR;
__IO uint32_t PTPTTLR;
uint32_t RESERVED8[567];
__IO uint32_t DMABMR;
__IO uint32_t DMATPDR;
__IO uint32_t DMARPDR;
__IO uint32_t DMARDLAR;
__IO uint32_t DMATDLAR;
__IO uint32_t DMASR;
__IO uint32_t DMAOMR;
__IO uint32_t DMAIER;
__IO uint32_t DMAMFBOCR;
uint32_t RESERVED9[9];
__IO uint32_t DMACHTDR;
__IO uint32_t DMACHRDR;
__IO uint32_t DMACHTBAR;
__IO uint32_t DMACHRBAR;
} ETH_TypeDef;

/**

使用特权

评论回复
36
和下土|  楼主 | 2021-5-21 14:34 | 只看该作者
@brief External Interrupt/Event Controller
*/
EXTI寄存器结构
EXTI 寄存器结构,EXTI_TypeDef,在文件stm2f10x_map.h中定义如下:
typedef struct {
vu32 IMR; vu32 EMR; vu32 RTSR; vu32 FTSR; vu32 SWIER; vu32 PR;
}EXTI_TypeDef;
Table 128. 例举了EXTI 所有寄存器 Table 128. EXTI寄存器
寄存器 描述 IMR 中断屏蔽寄存器 EMR 事件屏蔽寄存器 RTSR 上升沿触发选择寄存器 FTSR 下降沿触发选择寄存器 SWIR 软件中断事件寄存器 PR 挂起寄存器

typedef struct
{
__IO uint32_t IMR;
__IO uint32_t EMR;
__IO uint32_t RTSR;
__IO uint32_t FTSR;
__IO uint32_t SWIER;
__IO uint32_t PR;
} EXTI_TypeDef;

/**

@brief FLASH Registers
/
FLASH寄存器
寄存器 描述 ACR FLASH访问控制寄存器 KEYR FPEC密钥寄存器 OPTKEYR 选择字节密钥寄存器 SR FLASH状态寄存器 CR FLASH控制寄存器 AR FLASH地址寄存器 OBR 选择字节和状态寄存器 WRPR 选择字节写保护寄存器
typedef struct
{
__IO uint32_t ACR;
__IO uint32_t KEYR;
__IO uint32_t OPTKEYR;
__IO uint32_t SR;
__IO uint32_t CR;
__IO uint32_t AR;
__IO uint32_t RESERVED;
__IO uint32_t OBR;
__IO uint32_t WRPR;
#ifdef STM32F10X_XL
uint32_t RESERVED1[8];
__IO uint32_t KEYR2;
uint32_t RESERVED2;
__IO uint32_t SR2;
__IO uint32_t CR2;
__IO uint32_t AR2;
#endif / STM32F10X_XL */
} FLASH_TypeDef;

使用特权

评论回复
37
和下土|  楼主 | 2021-5-21 14:36 | 只看该作者
//本程序只供学习使用,如果用于工程应用,请仔细检查
//主要对于ST公司的库存文件stm32f10x.h进行解析
//修改日期:2014/6
//Copyright© 2014-2025
//All rights reserved
//******************************************************************************** */

/**

@brief Option Bytes Registers
*/选项字节寄存器
typedef struct
{
__IO uint16_t RDP;RDP 为 读出选项字节 ,USER 为 用户选项字节 , Data0 为 数据 0 选项字节,Data1 为 数据 1 选项字节,WRP0 为 写保护 0的先项字节。依此类推
__IO uint16_t USER;
__IO uint16_t Data0;
__IO uint16_t Data1;
__IO uint16_t WRP0;
__IO uint16_t WRP1;
__IO uint16_t WRP2;
__IO uint16_t WRP3;
} OB_TypeDef;

/**

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则