STM32F4xx之库函数

news2024/11/17 23:38:03

一、库函数介绍

库函数与寄存器的区别
库函数:不需要自己写很多代码,可以利用软件生成代码。使用的时候必须添加库文件。库文件是芯片厂商写好了。占用空间大。
寄存器:自己写的代码量大,没有软件生成代码。使用的时候不需要库文件。占用空间小。
当一款芯片在库函数开发的情况下由于内存不够,可以使用寄存器开发。

库文件介绍

1、如何找到各个模块的库函数

二、新建库函数工程

1. 先保证寄存器版本的工程能用
2. 添加一个全局宏定义

3.先建立包含对应的库函数的文件夹

4.把库函数的文件夹从官方的库函数文件夹里整个复制下来

5.包含库函数相应的头文件路径

初始化外设的小技巧:

一般都可以看到两种函数:

Init:初始化

Cmd:使能定时器

三、库函数的使用

1、RCC函数

使能/除能AHB1外设时钟
原形:void RCC_AHB1PeriphClockCmd  ( uint32_t  RCC_AHB1Periph,  FunctionalState  NewState )
作用:使能/除能AHB1外设时钟
参数:
RCC_AHB1Periph :要对AHB1那边外设进行时钟使能/除能操作(可以多个外设一起时钟使能、除能)
可取的值:
RCC_AHB1Periph_GPIOA: GPIOA clock 
RCC_AHB1Periph_GPIOB: GPIOB clock 
RCC_AHB1Periph_GPIOC: GPIOC clock 
RCC_AHB1Periph_GPIOD: GPIOD clock 
RCC_AHB1Periph_GPIOE: GPIOE clock 
RCC_AHB1Periph_GPIOF: GPIOF clock 
RCC_AHB1Periph_GPIOG: GPIOG clock 
RCC_AHB1Periph_GPIOH: GPIOH clock 
RCC_AHB1Periph_GPIOI: GPIOI clock 
RCC_AHB1Periph_GPIOJ: GPIOJ clock (STM32F42xxx/43xxx devices) 
RCC_AHB1Periph_GPIOK: GPIOK clock (STM32F42xxx/43xxx devices) 
RCC_AHB1Periph_CRC: CRC clock 
RCC_AHB1Periph_BKPSRAM: BKPSRAM interface clock 
RCC_AHB1Periph_CCMDATARAMEN CCM data RAM interface clock 
RCC_AHB1Periph_DMA1: DMA1 clock 
RCC_AHB1Periph_DMA2: DMA2 clock 
RCC_AHB1Periph_DMA2D: DMA2D clock (STM32F429xx/439xx devices) 
RCC_AHB1Periph_ETH_MAC: Ethernet MAC clock 
RCC_AHB1Periph_ETH_MAC_Tx: Ethernet Transmission clock 
RCC_AHB1Periph_ETH_MAC_Rx: Ethernet Reception clock 
RCC_AHB1Periph_ETH_MAC_PTP: Ethernet PTP clock 
RCC_AHB1Periph_OTG_HS: USB OTG HS clock 
RCC_AHB1Periph_OTG_HS_ULPI: USB OTG HS ULPI clock


NewState:可取值:ENABLE 或 DISABLE

2、低功耗模式(睡眠模式)时AHB1外设时钟使能/除能

原形:void RCC_AHB1PeriphClockLPModeCmd  ( uint32_t  RCC_AHB1Periph, FunctionalState  NewState );


3、AHB1外设模块进行复位----相关模块的寄存器值变成默认值

原形:void RCC_AHB1PeriphResetCmd  ( uint32_t  RCC_AHB1Periph,  FunctionalState  NewState );
允许多个AHB外设同时进行复位操作
使用示例:(往往类型以下示例同时使用)
RCC_AHB1PeriphResetCmd  (RCC_AHB1Periph_GPIOA,  ENABLE );   //对端口A进行复位
RCC_AHB1PeriphResetCmd  (RCC_AHB1Periph_GPIOA,  DISABLE);   //停止对端口A的复位

4、APB1外设时钟使能

原形:void RCC_APB1PeriphClockCmd  ( uint32_t  RCC_APB1Periph,  FunctionalState  NewState )  ;
作用:对APB1总线外设时钟使能/除能 (可以多个外设同时操作)
参数:
 APB1Periph:
RCC_APB1Periph_TIM2: TIM2 clock 
RCC_APB1Periph_TIM3: TIM3 clock 
RCC_APB1Periph_TIM4: TIM4 clock 
RCC_APB1Periph_TIM5: TIM5 clock 
RCC_APB1Periph_TIM6: TIM6 clock 
RCC_APB1Periph_TIM7: TIM7 clock 
RCC_APB1Periph_TIM12: TIM12 clock 
RCC_APB1Periph_TIM13: TIM13 clock 
RCC_APB1Periph_TIM14: TIM14 clock 
RCC_APB1Periph_LPTIM1: LPTIM1 clock (STM32F410xx devices) 
RCC_APB1Periph_WWDG: WWDG clock 
RCC_APB1Periph_SPI2: SPI2 clock 
RCC_APB1Periph_SPI3: SPI3 clock 
RCC_APB1Periph_SPDIF: SPDIF RX clock (STM32F446xx devices) 
RCC_APB1Periph_USART2: USART2 clock 
RCC_APB1Periph_USART3: USART3 clock 
RCC_APB1Periph_UART4: UART4 clock 
RCC_APB1Periph_UART5: UART5 clock 
RCC_APB1Periph_I2C1: I2C1 clock 
RCC_APB1Periph_I2C2: I2C2 clock 
RCC_APB1Periph_I2C3: I2C3 clock 
RCC_APB1Periph_FMPI2C1: FMPI2C1 clock 
RCC_APB1Periph_CAN1: CAN1 clock 
RCC_APB1Periph_CAN2: CAN2 clock 
RCC_APB1Periph_CEC: CEC clock (STM32F446xx devices) 
RCC_APB1Periph_PWR: PWR clock 
RCC_APB1Periph_DAC: DAC clock 
RCC_APB1Periph_UART7: UART7 clock 
RCC_APB1Periph_UART8: UART8 clock
NewState:ENABLE或 DISABLE

5、APB2外设时钟使能

原形:void RCC_APB2PeriphClockCmd  ( uint32_t  RCC_APB2Periph,   FunctionalState  NewState);

作用:对APB2总线外设时钟使能/除能 (可以多个外设同时操作)

参数:

RCC_APB2Periph

RCC_APB2Periph_TIM1: TIM1 clock

RCC_APB2Periph_TIM8: TIM8 clock

RCC_APB2Periph_USART1: USART1 clock

RCC_APB2Periph_USART6: USART6 clock

RCC_APB2Periph_ADC1: ADC1 clock

RCC_APB2Periph_ADC2: ADC2 clock

RCC_APB2Periph_ADC3: ADC3 clock

RCC_APB2Periph_SDIO: SDIO clock

RCC_APB2Periph_SPI1: SPI1 clock

RCC_APB2Periph_SPI4: SPI4 clock

RCC_APB2Periph_SYSCFG: SYSCFG clock

RCC_APB2Periph_TIM9: TIM9 clock

RCC_APB2Periph_TIM10: TIM10 clock

RCC_APB2Periph_TIM11: TIM11 clock

RCC_APB2Periph_SPI5: SPI5 clock

RCC_APB2Periph_SPI6: SPI6 clock

RCC_APB2Periph_SAI1: SAI1 clock (STM32F42xxx/43xxx/446xx/469xx/479xx devices)

RCC_APB2Periph_SAI2: SAI2 clock (STM32F446xx devices)

RCC_APB2Periph_LTDC: LTDC clock (STM32F429xx/439xx devices)

RCC_APB2Periph_DSI: DSI clock (STM32F469_479xx devices)

RCC_APB2Periph_DFSDM: DFSDM Clock (STM32F412xG Devices)

NewState:ENABLE或 DISABLE

6、备份区域复位

原形:void RCC_BackupResetCmd  ( FunctionalState  NewState ) 

作用:对备份区域复位/停止复位操作------RCC_BDCR的16位

参数:NewState:ENABLE或 DISABLE

7、清除复位标志

原形:void RCC_ClearFlag  ( void ) ;

8、获取相关时钟的频率

原理:void RCC_GetClocksFreq  ( RCC_ClocksTypeDef *  RCC_Clocks ) 

作用:获取系统时钟、AHB APB1 APB2时钟频率

参数:

typedef struct

{

  uint32_t SYSCLK_Frequency; /*!<  SYSCLK clock frequency expressed in Hz */

  uint32_t HCLK_Frequency;   /*!<  HCLK clock frequency expressed in Hz   */

  uint32_t PCLK1_Frequency;  /*!<  PCLK1 clock frequency expressed in Hz  */

  uint32_t PCLK2_Frequency;  /*!<  PCLK2 clock frequency expressed in Hz  */

}RCC_ClocksTypeDef;

四、GPIO相关库函数

1、GPIO_DeInit
函数原型:
void GPIO_DeInit  ( GPIO_TypeDef *  GPIOx )
函数功能:复位GPIOx.让GPIOx所有寄存器变成默认值
参数:
GPIOx,:如果使用的芯片是STM32F405xx/407xx and STM32F415xx/417xx,x的值可以为(A到K);如果使用的芯片是STM32F42xxx/43xxx,x的值可以为(A到I);如果使用的芯片是STM32F401xx,x的值可以为(A, B, C, D 和 H);
返回值: 无
注意事项:
默认状态下,所有GPIO口都是浮空输入(除了JTAG)
例子:

GPIO_DeInit (GPIOA );    //复位端口A

2、GPIO_Init

函数原型:
void GPIO_Init  ( GPIO_TypeDef *  GPIOx,   GPIO_InitTypeDef *  GPIO_InitStruct  );
功能:根据GPIO_InitStruct结构变量的值,来初始化GPIOx
参数:GPIOx:
GPIO_InitStruct:为GPIO_InitTypeDef的一个结构体变量

结构体变量原型:

typedef struct
{
  uint32_t  GPIO_Pin;               //哪个管脚
  GPIOMode_TypeDef  GPIO_Mode;    //模式
  GPIOSpeed_TypeDef  GPIO_Speed;    //输出速度
 GPIOOType_TypeDef  GPIO_OType;      //输出类型
 GPIOPuPd_TypeDef   GPIO_PuPd;       //上下拉
}GPIO_InitTypeDef;

成员取值:

GPIO_Pin:

#define  GPIO_Pin_0   ((uint16_t)0x0001)

#define  GPIO_Pin_1   ((uint16_t)0x0002)

#define  GPIO_Pin_2   ((uint16_t)0x0004)

#define  GPIO_Pin_3   ((uint16_t)0x0008)

#define  GPIO_Pin_4   ((uint16_t)0x0010)

#define  GPIO_Pin_5   ((uint16_t)0x0020)

#define  GPIO_Pin_6   ((uint16_t)0x0040)

#define  GPIO_Pin_7   ((uint16_t)0x0080)

#define  GPIO_Pin_8   ((uint16_t)0x0100)

#define  GPIO_Pin_9   ((uint16_t)0x0200)

#define  GPIO_Pin_10   ((uint16_t)0x0400)

#define  GPIO_Pin_11   ((uint16_t)0x0800)

#define  GPIO_Pin_12   ((uint16_t)0x1000)

#define  GPIO_Pin_13   ((uint16_t)0x2000)

#define  GPIO_Pin_14   ((uint16_t)0x4000)

#define  GPIO_Pin_15   ((uint16_t)0x8000)

#define  GPIO_Pin_All   ((uint16_t)0xFFFF)

GPIO_Mode:

typedef enum

{

  GPIO_Mode_IN   = 0x00,     /*!< GPIO Input Mode 普通功能输入*/

  GPIO_Mode_OUT  = 0x01,    /*!< GPIO Output Mode普通功能输出 */

  GPIO_Mode_AF   = 0x02,   /*!< GPIO Alternate function Mode复用功能 */

  GPIO_Mode_AN   = 0x03    /*!< GPIO Analog Mode模拟功能模式 */

}GPIOMode_TypeDef;

GPIO_Speed:

typedef enum

{

  GPIO_Low_Speed     = 0x00, /*!< Low speed   2MHZ */

  GPIO_Medium_Speed  = 0x01, /*!< Medium speed 25MHZ */

  GPIO_Fast_Speed    = 0x02, /*!< Fast speed   50MHZ */

  GPIO_High_Speed    = 0x03  /*!< High speed  100MHZ */

}GPIOSpeed_TypeDef;

GPIO_OType:

typedef enum

{

  GPIO_OType_PP = 0x00,      //推挽

  GPIO_OType_OD = 0x01      //开漏

}GPIOOType_TypeDef;

GPIO_PuPd:

typedef enum

{

  GPIO_PuPd_NOPULL = 0x00,     //不上拉也不下拉

  GPIO_PuPd_UP     = 0x01,     //上拉

  GPIO_PuPd_DOWN   = 0x02    //下拉

}GPIOPuPd_TypeDef;

例子:

GPIO_InitTypeDef   GPIO_InitStruct;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;
GPIO_Init  ( GPIOA,  &GPIO_InitStruct );

3、GPIO_PinAFConfig

函数原型:
void GPIO_PinAFConfig ( GPIO_TypeDef *  GPIOx,  uint16_t  GPIO_PinSource,  uint8_t  GPIO_AF )
功能:设置管脚的复用功能,一次只能设置一个管脚的复用功能
参数:GPIOx
GPIO_PinSource
GPIO_AF
返回值: 无
参数:
GPIO_PinSource:可以取得值:GPIO_PinSourcex ----x可以为(0..15)// 


GPIO_AF:

GPIO_AF_RTC_50Hz  : Connect RTC_50Hz pin to AF0 (default after reset)

GPIO_AF_MCO  : Connect MCO pin (MCO1 and MCO2) to AF0 (default after reset)

GPIO_AF_TAMPER  : Connect TAMPER pins (TAMPER_1 and TAMPER_2) to AF0 (default after reset)

GPIO_AF_SWJ  : Connect SWJ pins (SWD and JTAG)to AF0 (default after reset)

GPIO_AF_TRACE  : Connect TRACE pins to AF0 (default after reset)

GPIO_AF_TIM1  : Connect TIM1 pins to AF1

GPIO_AF_TIM2  : Connect TIM2 pins to AF1

GPIO_AF_TIM3  : Connect TIM3 pins to AF2

GPIO_AF_TIM4  : Connect TIM4 pins to AF2

GPIO_AF_TIM5  : Connect TIM5 pins to AF2

GPIO_AF_TIM8  : Connect TIM8 pins to AF3

GPIO_AF_TIM9  : Connect TIM9 pins to AF3

GPIO_AF_TIM10  : Connect TIM10 pins to AF3

GPIO_AF_TIM11  : Connect TIM11 pins to AF3

GPIO_AF_I2C1  : Connect I2C1 pins to AF4

GPIO_AF_I2C2  : Connect I2C2 pins to AF4

GPIO_AF_I2C3  : Connect I2C3 pins to AF4

GPIO_AF_SPI1  : Connect SPI1 pins to AF5

GPIO_AF_SPI2  : Connect SPI2/I2S2 pins to AF5

GPIO_AF_SPI4  : Connect SPI4 pins to AF5

GPIO_AF_SPI5  : Connect SPI5 pins to AF5

GPIO_AF_SPI6  : Connect SPI6 pins to AF5

GPIO_AF_SAI1  : Connect SAI1 pins to AF6 for STM32F42xxx/43xxx devices.

GPIO_AF_SPI3  : Connect SPI3/I2S3 pins to AF6

GPIO_AF_I2S3ext  : Connect I2S3ext pins to AF7

GPIO_AF_USART1  : Connect USART1 pins to AF7

GPIO_AF_USART2  : Connect USART2 pins to AF7

GPIO_AF_USART3  : Connect USART3 pins to AF7

GPIO_AF_UART4  : Connect UART4 pins to AF8

GPIO_AF_UART5  : Connect UART5 pins to AF8

GPIO_AF_USART6  : Connect USART6 pins to AF8

GPIO_AF_UART7  : Connect UART7 pins to AF8

GPIO_AF_UART8  : Connect UART8 pins to AF8

GPIO_AF_CAN1  : Connect CAN1 pins to AF9

GPIO_AF_CAN2  : Connect CAN2 pins to AF9

GPIO_AF_TIM12  : Connect TIM12 pins to AF9

GPIO_AF_TIM13  : Connect TIM13 pins to AF9

GPIO_AF_TIM14  : Connect TIM14 pins to AF9

GPIO_AF_OTG_FS  : Connect OTG_FS pins to AF10

GPIO_AF_OTG_HS  : Connect OTG_HS pins to AF10

GPIO_AF_ETH  : Connect ETHERNET pins to AF11

GPIO_AF_FSMC  : Connect FSMC pins to AF12

GPIO_AF_FMC  : Connect FMC pins to AF12 for STM32F42xxx/43xxx devices.

GPIO_AF_OTG_HS_FS  : Connect OTG HS (configured in FS) pins to AF12

GPIO_AF_SDIO  : Connect SDIO pins to AF12

GPIO_AF_DCMI  : Connect DCMI pins to AF13

GPIO_AF_LTDC  : Connect LTDC pins to AF14 for STM32F429xx/439xx devices.

GPIO_AF_EVENTOUT  : Connect EVENTOUT pins to AF15

例子:

GPIO_PinAFConfig  (GPIOA,  GPIO_PinSource9,  GPIO_AF_USART1 );

4、GPIO_PinLockConfig

原型:
void GPIO_PinLockConfig  ( GPIO_TypeDef *  GPIOx,  uint16_t  GPIO_Pin  )
功能:锁定端口设置
例:
GPIO_PinLockConfig( GPIOA, GPIO_Pin_9);

5、GPIO_ReadInputData
原型:
uint16_t  GPIO_ReadInputData  ( GPIO_TypeDef *  GPIOx )  
功能:读取某个端口的(IDR)值
例:
u16  a;
a=GPIO_ReadInputData  (GPIOA );

6、GPIO_ReadInputDataBit
原型:
uint8_t GPIO_ReadInputDataBit  ( GPIO_TypeDef *  GPIOx, uint16_t  GPIO_Pin )
功能:读取某个端口的(IDR)某一位的值
例:
if(GPIO_ReadInputDataBit  (GPIOA, GPIO_Pin_0 )== Bit_SET)
{
;
}

7、GPIO_ReadOutputData
原型:
uint16_t GPIO_ReadOutputData  ( GPIO_TypeDef *  GPIOx )  
功能:读取某个端口的(ODR)值
例:
u16  data;
data=GPIO_ReadOutputData  (GPIOA);

8、GPIO_ReadOutputDataBit
原型:
uint8_t GPIO_ReadOutputDataBit  ( GPIO_TypeDef *  GPIOx,  uint16_t  GPIO_Pin ) 
功能:读取某个端口的(ODR某一位的值
例:
u8 sta;
sta=GPIO_ReadOutputDataBit  ( GPIOA,GPIO_Pin_2 );

9、GPIO_ResetBits
原型:
void GPIO_ResetBits  ( GPIO_TypeDef *  GPIOx,  uint16_t  GPIO_Pin )
功能:对某个管脚清0操作
例:
GPIO_ResetBits  ( GPIOA, GPIO_Pin_1 );

10、GPIO_SetBits
原型:
void  GPIO_SetBits  ( GPIO_TypeDef *  GPIOx,  uint16_t  GPIO_Pin )
功能:对某个管脚置1操作
例:
GPIO_SetBits  ( GPIOA, GPIO_Pin_1 );

11、GPIO_StructInit
原型:
void GPIO_StructInit ( GPIO_InitTypeDef *  GPIO_InitStruct )  
功能:对GPIO_InitStruct结构体变量按缺省值写入,缺省值如下
GPIO_InitStruct.GPIO_Pin  = GPIO_Pin_All;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;

例:
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_StructInit ( &GPIO_InitStruct);
GPIO_Init  ( GPIOF,  &GPIO_InitStruct );

12、GPIO_ToggleBits
原型:
void GPIO_ToggleBits  ( GPIO_TypeDef *  GPIOx,  uint16_t  GPIO_Pin )
功能:对某个管脚座翻转输出操作
例:
GPIO_ToggleBits  ( GPIOA, GPIO_Pin_9 ) ;

13、GPIO_Write
原型:
void GPIO_Write  ( GPIO_TypeDef *  GPIOx, uint16_t  PortVal )
功能:对某个端口做输出操作
例:
GPIO_Write  ( GPIOA, 0X1234 );


14、GPIO_WriteBit
原型:
void GPIO_WriteBit  ( GPIO_TypeDef *  GPIOx,uint16_t  GPIO_Pin,  BitAction  BitVal)
功能:对某个端口某一位做置1或清0操作
例:
GPIO_WriteBit(  GPIOA , GPIO_Pin_9,  Bit_RESET );

五、USART相关库函数

1、USART_ClearFlag
原型:void USART_ClearFlag  ( USART_TypeDef *  USARTx,  uint16_t  USART_FLAG  )
功能:清串口相关标志(一次可以清除多个标志)
参数:USARTx:   串口的首地址
USART_FLAG:待清除标志

参数USARTx可取值:
USART1 ~ USART8
参数USART_FLAG可取的值:
USART_FLAG_CTS: CTS 标志
USART_FLAG_LBD: 清除lin 断路检测标志 
USART_FLAG_TC: 清发送完成标志
USART_FLAG_RXNE: 清接收缓存器非空标志

2、USART_ClearITPendingBit
原型:USART_ClearITPendingBit  ( USART_TypeDef *  USARTx,  uint16_t  USART_IT )
功能:清串口中断相关标志(一次只能清除一个标志)
参数:USARTx:   串口的首地址
USART_FLAG:待清除标志
参数USARTx可取值:
USART1 ~ USART8
参数USART_IT可取的值:
USART_FLAG_CTS: CTS 标志
USART_FLAG_LBD: 清除lin 断路检测标志 
USART_FLAG_TC: 清发送完成标志
USART_FLAG_RXNE: 清接收缓存器非空标志

3、USART_Cmd
原型:
void USART_Cmd  ( USART_TypeDef *  USARTx,  FunctionalState  NewState )
功能:开启/关闭串口
参数:USARTx:   串口的首地址
NewState: 使能/除能操作
参数SARTx:USART1 ~ USART8
参数NewState:ENABLE or DISABLE

4、USART_DeInit
原型:void USART_DeInit  ( USART_TypeDef *  USARTx )  
功能:复位串口-----使其相关寄存器值变成默认值

5、USART_DMACmd
原型:void USART_DMACmd  ( USART_TypeDef *  USARTx,    uint16_t  USART_DMAReq,    FunctionalState  NewState  );
功能:使能/除能串口DMA功能
参数:
USARTx:USART1 ~ USART8
USART_DMAReq: USART_DMAReq_Tx(发送DMA)   USART_DMAReq_Rx(接收DMA)
NewState: ENABLE / DISABLE

6、USART_GetFlagStatus
原型:FlagStatus USART_GetFlagStatus  ( USART_TypeDef *  USARTx,  uint16_t  USART_FLAG  )
功能:获取相关标志,查询相关标志是否被置位
参数:
USARTx------- USART1 ~ USART8
USART_FLAG:
USART_FLAG_CTS: CTS 标志 
USART_FLAG_LBD: LIN 断路检测标志 
USART_FLAG_TXE: 发送缓存器空标志 
USART_FLAG_TC: 发送完成标志 
USART_FLAG_RXNE: 接收缓存器非空标志
USART_FLAG_IDLE: 空闲标志 
USART_FLAG_ORE: 上溢错误标志
USART_FLAG_NE: 噪声标志
USART_FLAG_FE: 帧错误标志
USART_FLAG_PE: 奇偶校验错误标志
返回值:SET (相关标志被置1)RESET(相关标志位0

7、USART_GetITStatus
原型:ITStatus USART_GetITStatus  ( USART_TypeDef *  USARTx,  uint16_t  USART_IT  )
功能:查询相关中断产生与否,参数同上

8、USART_Init
原型:void USART_Init  ( USART_TypeDef *  USARTx,  USART_InitTypeDef *  USART_InitStruct  )
功能:串口初始化
参数:USARTx-------- USART1 ~ USART8
USART_InitStruct------初始化串口参数
结构体原型:
typedef struct
{
  uint32_t  USART_BaudRate;    //波特率
  uint16_t  USART_WordLength;   //字长
  uint16_t  USART_StopBits;       //停止位
  uint16_t  USART_Parity;       //校验
  uint16_t  USART_Mode;           //模式
  uint16_t  USART_HardwareFlowControl;//流控
} USART_InitTypeDef;
结构体成员值:
USART_WordLength :  USART_WordLength_8b   USART_WordLength_9b  
USART_StopBits :USART_StopBits_1  USART_StopBits0 _5  USART_StopBits1 _5  USART_StopBits2
USART_Parity:   USART_Parity_No   USART_Parity_Even  USART_Parity_Odd()
USART_Mode:   USART_Mode_Rx  USART_Mode_Tx
USART_HardwareFlowControl:  USART_HardwareFlowControl_None(无流控)
                            USART_HardwareFlowControl_RTS
                            USART_HardwareFlowControl_CTS
                            USART_HardwareFlowControl_RTS_CTS

9、USART_ITConfig
原型:void USART_ITConfig  ( USART_TypeDef *  USARTx,  uint16_t  USART_IT,  FunctionalState  NewState )
功能:使能/除能相关中断(一次只能开启或者关闭一个中断)

10、USART_ReceiveData
原型:uint16_t USART_ReceiveData  ( USART_TypeDef *  USARTx )  
功能:读取DR寄存器

11、USART_SendData
原型:void USART_SendData  ( USART_TypeDef *  USARTx,  uint16_t  Data  )
功能:发送数据

使用uart库函数的时候要注意一下stm32f4xx.h中123行的设置:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1363265.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

目标检测数据集大全「包含VOC+COCO+YOLO三种格式+划分脚本+训练脚本」(持续原地更新)

一、作者介绍&#xff1a;五年算法开发经验、AI 算法经理、阿里云开发社区专家博主、稀土掘金人工智能内容评审委员会成员。擅长&#xff1a;检测、分割、理解、AIGC 等算法训练与部署。 二、数据集介绍&#xff1a; 质量高&#xff1a;高质量图片、高质量标注数据&#xff0c;…

【LMM 011】MiniGPT-5:通过 Generative Vokens 进行交错视觉语言生成的多模态大模型

论文标题&#xff1a;MiniGPT-5: Interleaved Vision-and-Language Generation via Generative Vokens 论文作者&#xff1a;Kaizhi Zheng* , Xuehai He* , Xin Eric Wang 作者单位&#xff1a;University of California, Santa Cruz 论文原文&#xff1a;https://arxiv.org/ab…

[技术杂谈]使用VLC将视频转成一个可循环rtsp流

通过vlc播放器&#xff0c;将一个视频转成rtsp流&#xff0c;搭建一个rtsp服务器。rtsp客户端可访问这个视频的rtsp流。 1. 打开vlc播放器&#xff0c;使用的版本如下 2. 菜单&#xff1a;媒体 ---> 流 3. 添加视频文件&#xff0c;点击添加一个mp4 文件 4. 选择串流&…

从零开始C++精讲:第一篇——C++入门

文章目录 前言一、C关键字二、命名空间2.1引子2.2命名空间定义2.3命名空间的使用 三、C输入和输出3.1输出3.2输入 四、缺省参数4.1全缺省4.2半缺省 五、函数重载5.1重载概念 六、引用6.1定义6.2引用的使用示例6.2.1引用作参数6.2.1引用作返回值 6.3传值、传引用效率比较6.4常引…

JVM:字节码

JVM&#xff1a;字节码 前言1. JVM概述1.1 JVM vs JDK vs JRE1.1.1 JVM1.1.2 JDK1.1.2.1 常用的JDK8是Oracle JDK 还是 OpenJDK 1.1.3 JRE1.1.4 三者之间的关系与区别 1.2 什么是字节码?采用字节码的好处是什么?1.3 Java 程序从源代码到运行的过程1.4 JVM的生命周期1.5 JVM架…

RocketMQ详细介绍及核心问题解释(很全)

1. RocketMq是什么 一个纯Java、分布式队列模型的消息中间件&#xff0c;具有高可用、高可靠、高实时、低延迟的特点。&#xff08;记住这句就行了&#xff09; 2. RocketMq有什么功能 1、业务解耦&#xff1a;这也是发布订阅的消息模型。生产者发送指令到MQ中&#xff0c;然…

pytorch06:权重初始化

目录 一、梯度消失和梯度爆炸1.1相关概念1.2 代码实现1.3 实验结果1.4 方差计算1.5 标准差计算1.6 控制网络层输出标准差为11.7 带有激活函数的权重初始化 二、Xavier方法与Kaiming方法2.1 Xavier初始化2.2 Kaiming初始化2.3 常见的初始化方法 三、nn.init.calculate_gain 一、…

多线程高级知识点

多线程高级知识点 1.ThreadLocal 1.1 什么是 ThreadLocal&#xff1f; ​ ThreadLocal 叫做本地线程变量&#xff0c;意思是说&#xff0c;ThreadLocal 中填充的的是当前线程的变量&#xff0c;该变量对其他线程而言是封闭且隔离的&#xff0c;ThreadLocal 为变量在每个线程…

高性能NVMe Host Controller IP

NVMe Host Controller IP 介绍 NVMe Host Controller IP可以连接高速存储PCIe SSD&#xff0c;无需CPU和外部存储器&#xff0c;自动加速处理所有的NVMe协议命令&#xff0c;具备独立的数据写入AXI4-Stream/FIFO接口和数据读取AXI4-Stream/FIFO接口&#xff0c;非常适合于超高…

插槽slot涉及到的样式污染问题

1. 前言 本次我们主要结合一些案例研究一下vue的插槽中样式污染问题。在这篇文章中&#xff0c;我们主要关注以下两点: 父组件的样式是否会影响子组件的样式&#xff1f;子组件的样式是否会影响父组件定义的插槽部分的样式&#xff1f; 2. 准备代码 2.1 父组件代码 <te…

mysql基础-数据操作之增删改

目录 1.新增数据 1.1单条数据新增 1.2多条数据新增 1.3查询数据新增 2.更新 2.1单值更新 2.2多值更新 2.3批量更新 2.3.1 批量-单条件更新 2.3.2批量-多条件更新 2.4 插入或更新 2.5 联表更新 3.删除 本次分享一下数据库的DML操作语言。 操作表的数据结构&#xf…

《计算机科学中的建模技术》复习点

0 考试题型 题型&#xff1a;选择、填空、大题&#xff08;综合题&#xff09; 分值&#xff1a;选择填空30分&#xff0c;综合70分 填空&#xff1a;基本概念题 第 1 章&#xff1a;计算机科学基本问题与数学建模概要 1.1 科学计算的基本概念 科学计算是指利用计算机来完成…

Transformer架构和对照代码详解

1、英文架构图 下面图中展示了Transformer的英文架构&#xff0c;英文架构中的模块名称和具体代码一一对应&#xff0c;方便大家对照代码、理解和使用。 2、编码器 2.1 编码器介绍 从宏观⻆度来看&#xff0c;Transformer的编码器是由多个相同的层叠加⽽ 成的&#xff0c;每个…

【数据结构】二叉树的概念及堆

前言 我们已经学过了顺序表、链表、栈和队列这些属于线性结构的数据结构&#xff0c;那么下面我们就要学习我们第一个非线性结构&#xff0c;非线性结构又有哪些值得我们使用的呢&#xff1f;那么接下来我们就将谈谈树的概念了。 1.树的概念与结构 1.1树的概念 树是一种非线性…

2.C++的编译:命令行、makefile和CMake

1. 命令行编译 命令行编译是指直接在命令行中输入以下指令&#xff1a; 预处理&#xff1a;gcc -E main.c -o main.i 编译&#xff1a;gcc -S main.i -o main.s 汇编&#xff1a;gcc -c main.s -o main.o 链接&#xff1a;gcc main.o -o main 命令汇总&#xff1a;gcc main.c …

【ZooKeeper高手实战】ZAB协议:ZooKeeper分布式一致性的基石

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

第17课 为rtsp流加入移动检测功能

在上节课&#xff0c;我们成功拿到了rtsp视频和音频流&#xff0c;在第13课&#xff0c;我们为普通的usb摄像头加上了移动检测功能&#xff0c;那能不能给rtsp摄像头也加上移动检测功能以实现一些好玩的应用呢&#xff1f;答案是肯定的&#xff0c;在usb摄像头检测中&#xff0…

BetaFlight开源代码之电压校准

BetaFlight开源代码之电压校准 1. 源由2. 分析数据流3. 采样电路3. 原理4. 示例5. 实测&转换数据6. 参考资料 1. 源由 既然复杂的BetaFlight开源代码之电流校准都过了一遍&#xff0c;电压相对来说是比较简单的&#xff0c;一起过一下 2. 分析数据流 电源路径1》采样电路…

【Spring实战】24 使用 Spring Boot Admin 管理和监控应用

文章目录 1. 定义2. 使用场景3. 主要功能4. 示例1&#xff09;[服务端] 添加依赖2&#xff09;[服务端] 相关配置3&#xff09;[服务端] 启动类4&#xff09;[服务端] 启动服务5&#xff09;[服务端] 浏览器访问6&#xff09;[客户端] 添加依赖7&#xff09;[客户端] 相关配置8…

双变量probit模型

1. Probit模型 1.1 模型含义 假设个体只有两种选择&#xff0c;y1或y0。影响选择的变量都包括在向量x中。即线性概率模型为 y值服从两点分布 被认为是连接函数&#xff0c;函数选择具有一定的灵活性。如果为标准正态的累积分布函数&#xff0c;则模型成为Probit模型&#xff…