一.串口printf重定向

/* USER CODE BEGIN Includes */
#include <stdio.h>
/* USER CODE END Includes */
/* USER CODE BEGIN PTD */
int fputc(int ch, FILE *f)//printf函数重定向
{HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 8, HAL_MAX_DELAY );//huart1需要根据你的配置修改return ch;
}
int fgetc(FILE *f)//scanf函数重定向
{uint8_t ch;HAL_UART_Receive(&huart2,(uint8_t *)&ch , 8, HAL_MAX_DELAY );//huart1需要根据你的配置修改return ch;
}/* USER CODE END PTD */

二.ADC 轮询代码

1.定义ADC数字变量

/* USER CODE BEGIN PV */
uint16_t AD_Value = 0;
/* USER CODE END PV */

2.轮询方式转换代码

  /* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_ADC_Start(&hadc1);HAL_ADC_PollForConversion(&hadc1, 50);AD_Value = HAL_ADC_GetValue(&hadc1);printf("ADC_Value:%d\t",AD_Value);printf("ADC_Volt:%.4f\n",AD_Value*3.3f/4096);HAL_Delay(1000);}/* USER CODE END 3 */

3.ADC均值滤波

//ADC求平均值
//ADC1~2 , 次数
uint16_t ADC_Average(ADC_HandleTypeDef* hadc , uint16_t times)
{uint32_t temp_val=0;uint16_t i;for(i=0 ; i<times ; i++){temp_val+=HAL_ADC_GetValue(hadc);HAL_Delay(10);}return temp_val/times;}

1.开启ADC 3种模式 ( 轮询模式 中断模式 DMA模式 )
HAL_ADC_Start(&hadcx);

//轮询模式开启ADC    

HAL_ADC_Start_IT(&hadcx);

//中断轮询模式开启ADC   

HAL_ADC_Start_DMA(&hadcx);

//DMA模式开启ADC   

2.关闭ADC 3种模式 ( 轮询模式 中断模式 DMA模式 )
HAL_ADC_Stop()
HAL_ADC_Stop_IT()
HAL_ADC_Stop_DMA()

3.读取ADC转换值
HAL_ADC_GetValue()

4.等待转换结束函数
HAL_ADC_PollForConversion(&hadc1, 50);
第一个参数为那个ADC,第二个参数为最大等待时间

5.ADC中断回调函数
HAL_ADC_ConvCpltCallback()
转换完成后回调,DMA模式下DMA传输完成后调用

三.ADC_DMA代码

1.变量定义

/* USER CODE BEGIN PV */
uint32_t ADC_Value[16];             //定义ADC采集数字值
uint8_t i;                          //循环变量
uint16_t ad1;                       //转换模拟电压量
/* USER CODE END PV */

2.开启函数

  /* USER CODE BEGIN 2 */HAL_ADC_Start_DMA(&hadc1, ADC_Value, 32);               //以DMA方式开启ADC/* USER CODE END 2 */

notice:以半个字节写入,函数第三个变量应为采集数的2倍(猜的)

3.数据处理(均值滤波 + 串口打印)

  while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */for(i = 0,ad1 =0; i < 16;){ad1+=ADC_Value[i++];}ad1=(uint16_t)ad1/16;              //均值滤波printf("AD_Value: %d\t",ad1);printf("AD_Volt: %.04f\n",ad1*3.3f/4096);            //串口打印数字量,模拟量HAL_Delay(1000);}

notice:语句:ad1=(uint16_t)ad1/16; 采用强制数据类型转换,调试时发现如果不转换,会超出变量数值类型范围,导致数据错误。

四.定时器中断

1.使能定时器

  /* USER CODE BEGIN 2 */HAL_TIM_Base_Start_IT(&htim2);    //定时器2使能/* USER CODE END 2 */

2.编写中断回调函数

/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef* tim_baseHandle)
{if(tim_baseHandle->Instance == htim2.Instance)HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
}
/* USER CODE END 4 */

五.sprintf

用途:OLED/LCD屏幕显示字符串

1.添加头文件and添加显示数组

#include <stdio.h>
uint16_t display_temp[100];

2.编写代码

sprintf((char*)display_temp,"temp:%d",temp);
LCD_ShowString(20,20,display_temp,12);

stm32 常见模块代码相关推荐

  1. STM32常见模块电路设计

    对于一款单片机而言,有以下常见模块: 电源部分: 主控部分: 输入部分: 输出部分: 显示部分: 无线部分: 接口部分: 电机部分: 等等................. 此部分内容对于偏软件的工程 ...

  2. STM32——两个模块代码的合并

    文章背景: 作为一个STM32的新手小白,在学习并调试完单个模块代码后,接下来遇到的问题必然是如何将多个模块的代码合并到一个工程里.但是网上搜寻了很多资料,都没有对这块内容进行详细的解说.在这里笔者做 ...

  3. STM32超声波模块测距串口输出/通用定时器中断并输出PWM控制舵机/系统定时器延时

    参考:stm32 超声波模块 原理 实现测距 +舵机使用 作者:点灯小哥 发布时间: 2021-03-10 19:37:16 网址:https://blog.csdn.net/weixin_46016 ...

  4. Web前端开发之“常见模块你真的很了解吗?”

    本文节选自<编写高质量代码--Web前端开发修炼之道 > 3.4 常见模块你真的很了解吗 3.4.1 标题和内容 标题和内容模块如图3-13 所示. 图3-13 标题和内容模块 这种标题配 ...

  5. STM32常见通信方式(TTL、RS232、RS485、I2C,SPI,CAN)总结

    STM32常见通信方式(TTL.RS232.RS485.I2C,SPI,CAN)总结 一.TTL电平:全双工(逻辑1: 2.4V–5V   逻辑0: 0V–0.5V) 1.硬件框图如下,TTL用于两个 ...

  6. 卷积神经网络常见模块

    深度学习常见模型子模块 常见模块 1.卷积 1.1 2D卷积(单通道和多通道) 1.2 1x1 卷积 1.3 转置卷积(反卷积 Transposed convolution) 1.4 分组卷积(Gro ...

  7. STM32+光敏模块

    STM32+光敏模块 器件选择 4线光敏传感器介绍 光敏模块原理图 光敏模块实物 光敏模块引脚说明 CubeMX配置 代码主体部分 结果展示 器件选择 硬件平台选择STM32F103C8T6最小系统开 ...

  8. STM32——蓝牙模块HC06

    STM32--蓝牙模块HC06 选用的芯片是STM32F407的芯片,一个HC06的蓝牙模块. 我们采用串口连接,所以我们在芯片原理图找出串口模块. 参数 STM32串口异步通信定义的参数传送格式 起 ...

  9. 力士乐驱动器原理图_力士乐伺服驱动器的常见故障代码和解决方法

    力士乐伺服驱动器的常见故障代码和解决方法:上海仰光维修中心和网友们一起分享下比较常见的故障代码和检修技巧,以供大家参考! 一. 力士乐伺服驱动控制器毛病 伺服驱动由伺服驱动控制器DKC 及程序模块组成 ...

最新文章

  1. 容器装不下内容时,显示滚动条
  2. 解决 Gradle 进行多模块开发时,模块相互依赖的问题
  3. JDK1.8 之Stream API总结
  4. 在bootstrap table中使用Tooltip
  5. Java多线程系列--“JUC线程池”06之 Callable和Future
  6. linux的基础知识——TCP通信状态
  7. 从 Dagger 到 Hilt,谷歌为何执着于让我们用依赖注入?
  8. 软引用、弱引用、虚引用
  9. vue 获取url地址的参数_Vue 网络请求框架 axios 使用教程
  10. 逻辑回归与线性回归的区别
  11. gdb 调试kvm虚拟机_GDB+QEMU调试内核模块(实践篇)
  12. 递归--练习11--noi9273 PKU2506Tiling
  13. 差速驱动机器人轮间距校准实验
  14. H264--编码原理以及I帧B帧P帧--1
  15. 英伟达显卡控制面板没有显示设置的三种解决方法
  16. CAD制图初学入门:使用CAD切换窗口
  17. win10计算机本地组策略编辑器,win10本地组策略编辑器打不开最佳解决方法
  18. mac电脑外接显示器后没有声音
  19. 教你如何攻克Kotlin中泛型型变的难点(下篇)
  20. 大一上课设——贪吃蛇(链表 + easyx)

热门文章

  1. ITK开发入门hello,world
  2. oracle用户sysman过期,sysman密码过期导致oem无法使用
  3. AMD Linux催化剂显卡驱动年度横评
  4. 《FBI教你破解身体语言》书摘
  5. c webservice html,在WEBSERVICE中用于描述WEB服务的语言是()A、WSDLB、UMLC、 - 信管网...
  6. 【转载】通过JSFL让Flash Professional CS4或CS5拥有批量FLA导出SVG的功能
  7. 教你自动化测试执行用例报告
  8. 计算机原理实验存储器,计算机组成原理实验存储器.pptx
  9. html广告框,给WordPress首页添加简单广告框弹窗两种方法实现代码+插件
  10. 互联网科普-淘宝的聚划算(团购C2B)