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可以调节高低电平的占比。

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

相关推荐
沐欣工作室_lvyiyi12 分钟前
基于单片机的电厂烟道粉尘浓度检测系统(论文+源码)
单片机·嵌入式硬件·毕业设计
Groundwork Explorer1 小时前
异步框架+POLL混合方案应对ESP32 MPY多任务+TCP多连接
python·单片机
d111111111d3 小时前
什么是内存对齐?在STM32上面如何通过编辑器指令来实现内存对齐。
笔记·stm32·单片机·嵌入式硬件·学习·编辑器
bai5459363 小时前
STM32 CuberIDE 中断
stm32·单片机·嵌入式硬件
小叶子来了啊3 小时前
5Arduino 程序结构
单片机·嵌入式硬件
小叶子来了啊4 小时前
1Arduino 简介
单片机·嵌入式硬件
雾岛听风眠5 小时前
电路板维修
单片机·嵌入式硬件
少一倍的优雅5 小时前
hi3863(WS63) 智能小车 (一) 简单介绍
单片机·嵌入式硬件·harmonyos·hi3863
小幽余生不加糖5 小时前
步进电机、有刷直流电机以及无刷直流电机对比
笔记·单片机·嵌入式硬件·学习·能源
x976666 小时前
使用 HMAC-SHA256算法对MCU UID进行加密
单片机·嵌入式硬件·算法