HAL库常用函数总结

初始化函数:

HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);

读取输入电平函数:

HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_3);

设置输出电平函数:

HAL_GPIO_WritePin (GPIOA, GPIO_PIN_3, GPIO_PIN_SET);

电平翻转函数:

HAL_GPIO_TogglePin (GPIOA, GPIO_PIN_2);

延时200毫秒;

HAL_Delay(200);

中断处理函数:

void HAL_GPIO_EXTI_IRQHandler (uint16_t GPIO_Pin);

中断回调函数:

void HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin);

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){

        if(GPIO_Pin==Key_1_Pin){

            HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_1);

    }

};

定时器更新中断回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

  if(htim->Instance == TIM6)

        HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_5);

}

启动定时器(使用更新中断)。

HAL_TIM_Base_Start_IT (&htim6)

PWM接口函数

HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);

定时器比较/捕获寄存器CCR设置函数:

__HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,PWM_value);

while (1)

  {

       if(PWM_value==0||PWM_value<10000)

           PWM_value++;

       else if(PWM_value==10000)

           PWM_value=0;

       __HAL_TIM_SetCompare(&htim3,TIM_CHANNEL_2,PWM_value);

}}

修改重装载寄存器ARR函数

    HAL_TIM_SET_AUTORELOAD (&htime6, 500)

串口接收函数

HAL_UART_Receive(&huart1,RecBuf,8,100);

发送函数

HAL_UART_Transmit(&huart1 ,RecBuf,8,100);

uint8_t RecBuf[8];

while (1)

  {

        if(HAL_UART_Receive(&huart1,RecBuf,8,100)==HAL_OK){

            printf ("the response is:\r");

            HAL_UART_Transmit(&huart1 ,RecBuf,8,100);

            printf("\r");

        }

}

串口中断方式发送函数

HAL_UART_Transmit_IT(&huart1,(uint8_t *)RxBuffer,10);

串口中断方式接收函数

HAL_UART_Receive_IT(&huart1,(uint8_t *)RxBuffer,8);

串口发送中断回调函数:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){

        if(huart->Instance==USART1){

            Rxflag=1;

            HAL_UART_Receive_IT(&huart1,(uint8_t *)RxBuffer,10);

        }

}

while (1)

  {

        if(Rxflag==1){

            Rxflag=0;

            HAL_UART_Transmit_IT(&huart1,(uint8_t *)RxBuffer,10);

        }

  }

串口中断通用处理函数:

void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)

重写printf

#include "stdio.h"

int fputc(int ch,FILE *f){

    HAL_UART_Transmit (&huart1 ,(uint8_t*)&ch ,1,HAL_MAX_DELAY);

    return ch ;

}

int fgetc(FILE *f){

    uint8_t ch;

    HAL_UART_Receive (&huart1 ,(uint8_t*)&ch ,1,HAL_MAX_DELAY);

    return ch ;

}

printf("%d",a);输出十进制整数    printf("\r");回车

DMA

void USART1_IRQHandler(void)

{

  /* USER CODE BEGIN USART1_IRQn 0 */

  /* USER CODE END USART1_IRQn 0 */

  HAL_UART_IRQHandler(&huart1);

  /* USER CODE BEGIN USART1_IRQn 1 */

if(__HAL_UART_GET_FLAG (&huart1,UART_FLAG_IDLE)!=RESET )

{

    __HAL_UART_CLEAR_IDLEFLAG (&huart1);

    HAL_UART_IdleCpltCallback(&huart1 );

}

  /* USER CODE END USART1_IRQn 1 */

}

#define LENGTH 100

uint8_t  RxBuffer[LENGTH];

uint8_t RecCount = 0;

uint8_t RxFlag = 0;

__HAL_UART_ENABLE_IT (&huart1,UART_IT_IDLE);

HAL_UART_Receive_DMA (&huart1 ,(uint8_t*)RxBuffer ,LENGTH );

while (1)

  {

    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */

        if(RxFlag ==1)

        {

        RxFlag =0;

        RecCount = LENGTH-__HAL_DMA_GET_COUNTER (&hdma_usart1_rx);

        HAL_UART_Transmit_DMA (&huart1,(uint8_t*)RxBuffer,RecCount );

        RecCount = 0;

        __HAL_DMA_DISABLE (&hdma_usart1_rx );

        HAL_UART_Receive_DMA (&huart1 ,(uint8_t*)RxBuffer ,LENGTH );

        }

  }

void HAL_UART_RxCpltCallback(UART_HandleTypeDef  *huart)

{

    if(huart->Instance==USART2 )

    {HAL_UART_Receive_DMA (&huart1 ,(uint8_t*)RxBuffer ,LENGTH );

        }

}

void HAL_UART_IdleCpltCallback(UART_HandleTypeDef  *huart)

{

RxFlag =1;

    HAL_UART_DMAStop(&huart1);

}

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值