STM32hal库部分函数

该文章主要是我用来记录一些容易遗忘的函数,如有错误,望指教。

1.

    sprintf((char*)accelX_buff,"AccelX:%-.3f   ",ax);
    OLED_ShowString(0,0,accelX_buff,8);//我自己函数库中的函数

sprintf 是一个标准的 C 语言库函数,用于将格式化的数据写入字符串。它的原型定义在 <stdio.h> 头文件中,如下所示:

int sprintf(char *str, const char *format, ...);
  • char *str:指向目标字符串的指针,这个字符串将被 sprintf 函数填充格式化后的数据。
  • const char *format:一个格式化字符串,它控制如何将后续的参数插入到 str 中。格式化字符串中的特殊格式说明符(如 %d%f%s 等)指定了后续参数的类型和格式。
  • ...:可变参数列表,包含了要格式化并写入 str 的一个或多个值。

sprintf 函数的返回值是写入目标字符串的字符数(不包括终止的空字符 \0)。如果发生错误,返回值可能是负数。

2.

// 函数功能: 重定向c库函数printf到DEBUG_USARTx
int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
  return ch;
}
 

//   函数功能: 重定向c库函数getchar,scanf到DEBUG_USARTx
int fgetc(FILE *f)
{
  uint8_t ch = 0;
  HAL_UART_Receive(&huart1, &ch, 1, 0xffff);
  return ch;
}

这段代码定义了一个名为 fgetc 的函数,其目的是从串口(通过 HAL_UART_Receive 函数)读取一个字符。然而,这个函数并不符合标准库中 fgetc 函数的预期行为。标准的 fgetc 函数是用来从文件流中读取一个字符的,而这里的实现是直接从 UART 硬件接口读取数据。

函数的参数是 FILE *f,但在函数体内部并没有使用这个参数。相反,它使用了一个全局或静态定义的 huart1 UART 句柄和一个局部变量 ch 来存储接收到的字符。

HAL_UART_Receive 函数是来自 STM32 HAL (硬件抽象层) 库的一个函数,用于接收 UART 数据。该函数的参数解释如下:

&huart1:指向 UART 句柄的指针,代表要操作的 UART 硬件接口。

&ch:指向要接收数据的变量的指针,这里是一个 uint8_t 类型的变量。

1:指定要接收的数据数量,这里是 1 个字节。

0xffff:指定接收操作的超时时间,以毫秒为单位。这里设置的是一个很大的值,意味着几乎不会超时,等待直到接收到数据。

函数的返回值是 ch,即接收到的字符。

需要注意的几点:

  1. 由于 HAL_UART_Receive 是非阻塞的,如果没有数据可读,它会立即返回,此时 ch 的值将保持为 0。
  2. 这个函数没有考虑错误处理,如果 HAL_UART_Receive 失败,它不会返回任何错误信息。
  3. f 参数没有被使用,因此这个函数并不依赖于任何特定的 FILE 流,而是直接操作 UART。
  4. 由于直接操作了硬件,这个函数的使用应该局限于特定的上下文中,不能替代标准库中的 fgetc 函数。

3.

__HAL_TIM_SetCompare(&htim1,TIM_CHANNEL_2,speed);

__HAL_TIM_SetCompare 是一个宏,用于设置定时器通道的比较值,它是 STM32 HAL (硬件抽象层) 库的一部分。此宏的作用是修改定时器的捕获/比较寄存器的值,这个值通常用于PWM(脉冲宽度调制)信号的生成或者定时器的其他功能。

宏的参数如下:

  • &htim1:指向定时器句柄的指针。htim1 是一个 TIM_HandleTypeDef 类型的实例,它包含了定时器的配置信息和状态。
  • TIM_CHANNEL_2:指定要设置比较值的通道。STM32 定时器通常具有多个通道(例如,TIM1 有4个通道:TIM_CHANNEL_1, TIM_CHANNEL_2, TIM_CHANNEL_3, TIM_CHANNEL_4),每个通道可以独立配置。
  • speed:要设置的比较值。这个值决定了PWM信号的占空比,进而控制连接到该定时器通道的外设,如电机速度。

当调用 __HAL_TIM_SetCompare 宏时,它会将 speed 参数的值写入定时器的捕获/比较寄存器中。这个操作会立即影响到定时器产生的PWM信号的脉宽,因此常用于实时控制如电机速度等应用。

 4.

HAL_Init() 

  • Delay: 此函数用于初始化整个HAL库。

 5.

HAL_Delay(uint32_t Delay)
  • Delay: 要延迟的毫秒数。

 6.

HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
  • GPIOx: 要操作的GPIO端口寄存器的指针,例如 GPIOAGPIOB 等。
  • GPIO_Pin: 要操作的GPIO引脚掩码,例如 GPIO_PIN_5
  • PinState: 要设置的引脚状态,可以是 GPIO_PIN_SET 或 GPIO_PIN_RESET

 7.

HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
  • GPIOx: 要读取的GPIO端口寄存器的指针。
  • GPIO_Pin: 要读取的GPIO引脚掩码。

 8.

HAL_UART_Transmit(UART_HandleTypeDef* huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

9. 

  • huart: UART句柄的指针,包含了UART的配置信息。
  • pData: 指向要发送的数据缓冲区的指针。
  • Size: 要发送的数据的长度(字节数)。
  • Timeout: 等待传输完成的超时时间(毫秒)。

10. 

HAL_UART_Receive(UART_HandleTypeDef* huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
  • huart: UART句柄的指针。
  • pData: 指向接收数据缓冲区的指针。
  • Size: 要接收的数据的长度。
  • Timeout: 等待接收完成的超时时间。

11. 

HAL_TIM_PWM_Start(TIM_HandleTypeDef* htim, uint32_t Channel)
  • htim: 定时器句柄的指针,包含了定时器的配置信息。
  • Channel: PWM通道,例如 TIM_CHANNEL_1

12. 

HAL_TIM_PWM_Stop(TIM_HandleTypeDef* htim, uint32_t Channel)
  • htim: 定时器句柄的指针。
  • Channel: PWM通道。

13. 

HAL_TIM_Base_Start(TIM_HandleTypeDef* htim)
  • htim: 定时器句柄的指针。

 14.

HAL_TIM_Base_Stop(TIM_HandleTypeDef* htim)
  • htim: 定时器句柄的指针。

15. 

HAL_ADC_Start(ADC_HandleTypeDef* hadc)
  • hadc: ADC句柄的指针,包含了ADC的配置信息。

16. 

HAL_ADC_Stop(ADC_HandleTypeDef* hadc)
  • hadc: ADC句柄的指针。

17. 

HAL_DAC_SetChannel1Data(DAC_HandleTypeDef* hadc, uint32_t Align, uint16_t OutputData)
  • hadc: DAC句柄的指针。
  • Align: 数据对齐方式,可以是 DAC_ALIGN_8B_R 或 DAC_ALIGN_10B_R
  • OutputData: 要输出的数据。

18. 

HAL_DAC_Start(DAC_HandleTypeDef* hadc, uint32_t Channel)
  • hadc: DAC句柄的指针。
  • Channel: DAC通道,例如 DAC_CHANNEL_1

19. 

HAL_I2C_Master_Transmit(I2C_HandleTypeDef* hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
  • hi2c: I2C句柄的指针,包含了I2C的配置信息。
  • DevAddress: I2C从设备的地址。
  • pData: 指向要发送的数据缓冲区的指针。
  • Size: 要发送的数据的长度。
  • Timeout: 等待传输完成的超时时间。

20. 

HAL_I2C_Master_Receive(I2C_HandleTypeDef* hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout)
  • hi2c: I2C句柄的指针。
  • DevAddress: I2C从设备的地址。
  • pData: 指向接收数据缓冲区的指针。
  • Size: 要接收的数据的长度。
  • Timeout: 等待接收完成的超时时间。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值