一.串口通信
extern放在main.h中
需要初始化
//define
uint8_t RX[20];
uint8_t TX[20];
uint8_t Recount=0;
extern DMA_HandleTypeDef hdma_usart1_rx;
//main
__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
HAL_UART_Receive_DMA(&huart1,RX,20);
//back function
void Rec_Control()
{
HAL_UART_Transmit_DMA(&huart1,RX,strlen((char*)TX));
}
void HAL_UART_IdleCpltCallback(UART_HandleTypeDef *huart)
{
Recount = 20 - __HAL_DMA_GET_COUNTER(&hdma_usart1_rx);
Rec_Control();
Recount = 0;
HAL_UART_Receive_DMA(&huart1,RX,20);
}
//check function
if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)!=RESET)
{
__HAL_UART_CLEAR_IDLEFLAG(&huart1);
HAL_UART_DMAStop(&huart1);
HAL_UART_IdleCpltCallback(&huart1);
}
二.
ADC
double R_37=0;
double R_38=0;
uint8_t str[20];
void Get_R37()
{
HAL_ADC_Start(&hadc2);
HAL_ADC_PollForConversion(&hadc2,10);
int temp1 = HAL_ADC_GetValue(&hadc2);
R_37 = temp1*3.3/4096;
HAL_ADC_Stop(&hadc2);
}
void Get_R38()
{
HAL_ADC_Start(&hadc1);
HAL_ADC_PollForConversion(&hadc1,10);
int temp2 = HAL_ADC_GetValue(&hadc1);
R_38 = (temp2*3.3)/4096;
}
void Show()
{
Get_R37();
Get_R38();
sprintf((char*)str," R37 %.2fV",R_37);
LCD_DisplayStringLine(Line4,str);
sprintf((char*)str," R38 %.2fV",R_38);
LCD_DisplayStringLine(Line5,str);
}
DAC
开头要填写开始函数
HAL_DAC_Start(&hdac1,DAC_CHANNEL_1);
HAL_DAC_Start(&hdac1,DAC_CHANNEL_2);
结束要有Stop函数
void Set_Value(float r39,float r40)
{
int temp1 = (r39*4096)/3.3;
int temp2 = (r40*4096)/3

文章详细介绍了嵌入式系统中串口通信的DMA接收和发送、ADC电压测量、DAC信号输出、PWM控制、RTC时间管理、EEPROM数据存储以及按键扫描和LCD显示等关键功能的实现方法。
最低0.47元/天 解锁文章
2711

被折叠的 条评论
为什么被折叠?



