freeROTS day2

使用ADC采样光敏电阻数值,如何根据这个数值调节LED灯亮度。

//打开定时器3的通道3,并且设置为PWM功能

HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);

/* USER CODE END 2 */

/* Infinite loop */

/* USER CODE BEGIN WHILE */

while (1)

{

/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */\

HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);

HAL_ADC_Start(&hadc);//开启ADC采样

//获取ADC值

adc_val = HAL_ADC_GetValue(&hadc);

vlot = adc_val / 4095.0 * 999;

printf("adc_val:%d\r\n",adc_val);

int val = vlot;

TIM3->CCR3 = 999-val;

HAL_Delay(50);

}

总结DMA+空闲中断接收数据的使用方法:

1.需在cubeMX上开启DMA接收

2.以DMA+空闲中断方式接收数据:

HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart,uint8_t *pData,uint16_t Size)

3.在回调函数对接收的数据进行处理

DMA的作用

直接存储器存储,减轻cpu的负担,提高系统的性能;

DMA加空闲中断接收数据:用于接收不定长数据,由于CPU不知道什么时候有数据会发来,可以开启DMA接收,让DMA一直监测,当有数据并且接收完一包数据就会产生空闲中断处理数据。

串口重定向:

由于调用printf会调用fputc然后再调用HAL_UART_Transmit来发送数据,所以我们可以只要重新实现fputc就可以重新实现使用printf向打印发送的数据

1、重写fputc

2、勾选MICRO LIB

3、打开串口接收中断

4、在串口接收中断回调函数取出数据

5、接收完数据需要重新打开串口接收中断

ADC采样:

分辨率:采样的精度,分辨率越高就代表了采样精度越高,得到的数据越准确。

12位的ADC:采样得到的数据的范围是在0~2^12-`(4095)

ADC采样时间:采样时间越长 ,采样的精度越高

PWM:

占空比 = 高电平占整个周期的时间 / 总电平时间

一个定时器有四个PWM输出通道

CNT:计数值

ARR:重装载值

CCRX:比较寄存器

关系:

当CNT的值到达ARR的时候就会溢出就会变成0,然后重新计数。

CNT从0开始计数。

当CNT = CCRX的值就表现高电平。

ARR的值已经确定了,通过调节CCRX可以调节高低电平的占比。

通过调节高电平占整个周期的时间来调节占空比。

相关推荐
进击的小头31 分钟前
第19篇:嵌入式定点与浮点运算科普:核心差异、精度控制与开发技巧
单片机·嵌入式硬件
M158227690551 小时前
老 PLC 秒接工业以太网|三格电子串口转网口模块,让设备改造零门槛、一步上云
单片机·嵌入式硬件
神一样的老师2 小时前
【兆易创新GD32VW553开发板试用】开发板资料汇总
单片机
zmj3203242 小时前
单片机电路中不同点的电压计算
单片机·嵌入式硬件·电路·单片机电路
三品吉他手会点灯2 小时前
STM32 VSCode 开发-与STM32CubeMX协同开发环境搭建
vscode·stm32·单片机·嵌入式硬件
weixin_669545202 小时前
支持 18W 快充的 2 节/3 节串联锂电池高效同步升压充电芯片 SW7306
人工智能·单片机·嵌入式硬件·硬件工程
kaikaile19953 小时前
STM32 + MODBUS RTU + RS485 实现方案
stm32·单片机·嵌入式硬件
CinzWS3 小时前
BASETIMER(基本定时器) - 系统的时基:从时钟源、分频链到定时中断的确定性追求
单片机·嵌入式·basetimer
zy135380675733 小时前
6v/2.7A的H桥驱动芯片AH6227主要用于5v的适配器上
stm32·单片机·嵌入式硬件
维吉斯蔡3 小时前
【计算机是怎样跑起来的】(二)CPU、内存、I/O 和总线到底是什么?
笔记·stm32·单片机·物联网·计算机外设·51单片机