1、总结串口的发送和接收功能使用到的函数
用于串口数据的发送:
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, //指定要使用的串口
const uint8_t *pData, //要发送的数据
uint16_t Size, //要发送的数据字节数
uint32_t Timeout) //超时时间,单位是ms
用于串口数据的接收:
HAL_StatusTypeDef HAL_UART_Receive_IT(
UART_HandleTypeDef *huart, //指定从哪个串口中接收数据
uint8_t *pData, //接收到数据后保存的地址
uint16_t Size) //每一次接收多少个字节数据
接收数据的回调函数:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
2、总结DMA的作用,和DMA+空闲中断的使用方式
DMA的作用:无须 CPU 干预,数据都可以通过 DMA 进行快速地传输。为其他操作保留了 CPU 资源。
DMA可以减轻CPU的负担,提高CPU的运行效率。
DMA+空闲中断的使用方式:1)先将STM32CubeMX中串口DMA接收功能打开
2)当发送完成一次数据后,过一个字节数据的时间会产生空闲中断,在空闲中断中处理接收到的一包数据。
3)HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) 然后使用该函数,每次接收一次数据都会调用一次
4)处理完成一次数据后需要对数组进行清空,并且处理完成数据后还需要再次调用,进行下一次的接收
3、使用PWM+ADC光敏电阻完成光控灯的实验
while (1)
{
HAL_ADC_Start(&hadc); //打开ADC采样
adc_val = HAL_ADC_GetValue(&hadc); //将ADC采样到的值赋值给adc_val变量
//printf("adc_val : %d\r\n",adc_val);
HAL_Delay(100);
//随adc_val变化
TIM3->CCR3 = adc_val - 2000;
}