嵌入式学习-FreeRTOS-Day2
一、思维导图
二、作业
1.使用ADC采样光敏电阻数值,如何根据这个数值调节LED灯亮度。
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_ADC_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);//打开定时器3的通道3 并且设置为pwm功能
//TIM3->CCR3 =500;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//光敏电阻部分
HAL_ADC_Start(&hadc); //不断打开adc
adc_val = HAL_ADC_GetValue(&hadc);//获取adc的采样数值
v=(adc_val/4095.00)*3.3;
HAL_Delay(100);
//根据光调节LED灯亮度
TIM3->CCR3 = adc_val/4095.00*999;
printf("ccr3 = %d\r\n",TIM3->CCR3);
}
/* USER CODE END 3 */
}
2.总结DMA+空闲中断接收数据的使用方法
//打开DMA接收,检测是否有数据,当有数据且接收完后产生空闲中断处理数据
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
//空闲中断回调函数
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
//在函数内判断接收的数据执行不同的操作
}
适用于适用于数据量大并且数据不确定长度的情况下