一. main.c
void LED_Init(void)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
void LED_SHOW(uint8_t led)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOC, led<<8, GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
void LED_Proc(void)
{
LED_SHOW(LED);
if(Mode_Sign==0)
{
LED|=0x01;
}
else
{
LED&=0xfe;
}
if(LCD_SHOW==0)
{
LED|=0x02;
}
else
{
LED&=0xfd;
}
}
void Key_Proc(void)
{
if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==GPIO_PIN_RESET)//B1
{
LCD_SHOW++;
if(LCD_SHOW>=2)
{
LCD_SHOW=0;
}
while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==GPIO_PIN_RESET);
}
else if( (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==GPIO_PIN_RESET)&&(LCD_SHOW==1) )//B2-参数界面
{
Duty_PA6_PARA+=10;
if(Duty_PA6_PARA==100)
{
Duty_PA6_PARA=10;
}
while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)==GPIO_PIN_RESET);
}
else if( (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==GPIO_PIN_RESET)&&(LCD_SHOW==1) )//B3-参数界面
{
Duty_PA7_PARA+=10;
if(Duty_PA7_PARA==100)
{
Duty_PA7_PARA=10;
}
while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==GPIO_PIN_RESET);
}
else if( (HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==GPIO_PIN_RESET)&&(LCD_SHOW==0) )//B3-数据界面
{
Cache=COUNTER_PA6;
COUNTER_PA6=COUNTER_PA7;
COUNTER_PA7=Cache;
//
while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)==GPIO_PIN_RESET);
}
else if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET)//B4
{
Mode_Sign^=1;
while(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_RESET);
}
}
void Mode_Proc(void)
{
if(Mode_Sign==0)//自动模式
{
Duty=((ADC*100)/330);
COMPARE_PA6=Duty*COUNTER_PA6;
COMPARE_PA7=Duty*COUNTER_PA7;
Duty_PA6_AUTO=Duty*100;
Duty_PA7_AUTO=Duty*100;
Duty_PA6=Duty_PA6_AUTO;
Duty_PA7=Duty_PA7_AUTO;
}
else if(Mode_Sign==1)//手动模式
{
COMPARE_PA6=Duty_PA6_PARA*COUNTER_PA6/100;
COMPARE_PA7=Duty_PA7_PARA*COUNTER_PA7/100;
Duty_PA6=Duty_PA6_PARA;
Duty_PA7=Duty_PA7_PARA;
}
__HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,COMPARE_PA6);
__HAL_TIM_SET_COMPARE(&htim17,TIM_CHANNEL_1,COMPARE_PA7);
__HAL_TIM_SET_AUTORELOAD(&htim3,COUNTER_PA6-1);
__HAL_TIM_SET_AUTORELOAD(&htim17,COUNTER_PA7-1);
}
void LCD_Proc(void)
{
if(LCD_SHOW==0)//0-数据界面
{
// "123456789A
sprintf((char *)LCD_STR," Data ");
LCD_DisplayStringLine(Line0,LCD_STR);
sprintf((char *)LCD_STR," V:%3.2fV ",ADC);
LCD_DisplayStringLine(Line2,LCD_STR);
if(Mode_Sign==0)
{
sprintf((char *)LCD_STR," Mode:AUTO ");
}
else if(Mode_Sign==1)
{
sprintf((char *)LCD_STR," Mode:MANU ");
}
LCD_DisplayStringLine(Line4,LCD_STR);
}
else if(LCD_SHOW==1)//1-参数界面
{
// "123456789A
sprintf((char *)LCD_STR," Para ");
LCD_DisplayStringLine(Line0,LCD_STR);
sprintf((char *)LCD_STR," PA6:%d%% ",Duty_PA6);
LCD_DisplayStringLine(Line2,LCD_STR);
sprintf((char *)LCD_STR," PA7:%d%% ",Duty_PA7);
LCD_DisplayStringLine(Line4,LCD_STR);
sprintf((char *)LCD_STR," TXt:%d ",COMPARE_PA6);
LCD_DisplayStringLine(Line5,LCD_STR);
}
}
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
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_GPIO_Init();
MX_ADC2_Init();
MX_TIM6_Init();
MX_TIM3_Init();
MX_TIM17_Init();
/* USER CODE BEGIN 2 */
LCD_Init();
LCD_SetTextColor(White);
LCD_SetBackColor(Black);
LCD_Clear(Black);
HAL_ADC_Init(&hadc2);
LED_Init();
// HAL_TIM_PWM_Init(&htim3);
// HAL_TIM_PWM_Init(&htim17);
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim17,TIM_CHANNEL_1);
// HAL_TIM_Base_Init(&htim6);
HAL_TIM_Base_Start_IT(&htim6);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
LCD_Proc();
ADC_Proc();
LED_Proc();
}
/* USER CODE END 3 */
}
二. adc.c
float ADC=0;
uint32_t Get_R37(void)
{
uint32_t adc=0;
HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
HAL_ADC_Start(&hadc2);
adc = HAL_ADC_GetValue(&hadc2);
return adc;
}
void ADC_Proc(void)
{
uint32_t sum=0,i=0;
for(i=0;i<10;i++)
{
sum+=Get_R37();
}
sum/=10;
ADC=sum*3.3f/4096;
}
三. tim.c
int a=0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance==TIM6)
{
a++;
Key_Proc();
if(a>=10)
{
Mode_Proc();
a=0;
}
}
}