STM32外设应用实例(自用)

定时器

按种类可分为高级、通用、基本定时器。

定时器的应用场景有定时计数,DAC/ADC时钟,PWM输出,输入捕获,输出比较,带可编程死区的互补输出。

串口DMA

CubeMX配置

代码部分

1.

2.

3.

整合

//串口接收
u8 uart_buf[20];
u8 rx_buf[10];
u8 rx_cnt;
u32 uartTick;

void RxIdle_Process()//串口接收延时判断函数
{
  if(uwTick - uartTick < 50) return;//50ms清空一次
  uartTick = uwTick;
  
  rx_cnt = 0;
  memset(rx_buf,'\0',sizeof(rx_buf));//清空缓存数组
}


/* 串口DMA不定长数据收发 */
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
    if(huart == &huart1)
    {
        HAL_UART_Transmit_DMA(&huart1,uart_buf,Size);
        
        rx_buf[rx_cnt++] = uart_buf[0];
          if(rx_cnt > 0)
          {
              printf("%s",rx_buf);
          }
        
        /* 这里使用HAL_UARTEx)ReceiveToldle 或者 HAL_UARTEx_ReceiveToIdle_IT 也可以*/
        HAL_UARTEx_ReceiveToIdle_DMA(&huart1,uart_buf,sizeof(uart_buf));//启动接收
        __HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);//关闭DMA传输过半中断
    }
      
}

while(1)初始化前

  //串口接收DMA

  HAL_UARTEx_ReceiveToIdle_DMA(&huart1,uart_buf,sizeof(uart_buf));
  __HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);//关闭DMA传输过半中断
  
  //这里填参数之前,要在main.h 里添加extern DMA_HandleTypeDef hdma_usart1_rx;

蓝牙模块

类型分为经典蓝牙(蓝牙耳机),低功耗蓝牙(运动手环等)。相当于透明的串口线

2.4Ghz国际通用公开的频段。

两种工作模式:AT指令模式,数据透传模式。

AT指令模式

AT指令模式指的是蓝牙未连接的工作模式。该模式下可以配置蓝牙参数(蓝牙名字,蓝牙密码,蓝牙地址......),需要利用固定的AT指令。不同公司设计的蓝牙模块的AT指令大同小异。

 举例:

数据透传模式

数据透传模式指的是蓝牙已经被手机连接,该模式下蓝牙就相当于一根透明的串口线,蓝牙只负责把数据发送到目的地,不对数据进行处理。

命令处理过程中用到的函数

strstr()

strstr 函数用于在一个字符串中查找另一个子字符串,并返回子字符串第一次出现的位置。

函数原型
char *strstr(const char *haystack, const char *needle);

haystack:要搜索的字符串。

needle:要查找的子字符串。

返回值

如果 needle 是 haystack 的一个子字符串,返回 needle 在 haystack 中第一次出现的位置的指针。

如果 needle 为空字符串,返回 haystack

如果 needle 不在 haystack 中,返回 NULL

示例
#include <stdio.h>
#include <string.h>

int main() {
    const char *haystack = "Hello, world!";
    const char *needle = "world";
    char *result;

    result = strstr(haystack, needle);
    if (result != NULL) {
        printf("Found '%s' at position: %ld\n", needle, result - haystack);
    } else {
        printf("'%s' not found\n", needle);
    }

    return 0;
}

strtok()

strtok 函数用于将一个字符串分割成多个标记(tokens),并根据指定的分隔符进行分割

函数原型
char *strtok(char *str, const char *delim);

str:要分割的字符串。如果是第一次调用,传入要分割的字符串;之后的调用传入 NULL

delim:分隔符字符串,由此字符串中的任意字符都将作为分隔符。

返回值

返回指向当前标记的指针。

当没有更多标记时,返回 NULL

示例
#include <stdio.h>
#include <string.h>

int main() {
    char str[] = "Hello, world! Welcome to C programming.";
    const char *delim = " ,!";
    char *token;

    token = strtok(str, delim);
    while (token != NULL) {
        printf("Token: %s\n", token);
        token = strtok(NULL, delim);
    }

    return 0;
}

DHT11

IIC  CubeMX配置

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值