BSP_LED_Lock();
LED_DATA_SAVE = LED_data;
}
typedef enum
{
LED_ON = 1,
LED_OFF = 0,
LED_TOGGLE = 2
} LED_State;
void BSP_LED_SigleLED(uint8_t LED_num, LED_State state)
{
BSP_LED_Unlock();
if (state == LED_ON)
{
HAL_GPIO_WritePin(GPIOC, 0x0001 << (LED_num + 7), GPIO_PIN_RESET);
}
else if (state == LED_OFF)
{
HAL_GPIO_WritePin(GPIOC, 0x0001 << (LED_num + 7), GPIO_PIN_SET);
}
else if (state == LED_TOGGLE)
{
HAL_GPIO_TogglePin(GPIOC, 0x0001 << (LED_num + 7));
}
/* USER CODE BEGIN Init */
LCD_Init();
/* USER CODE END Init */
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
/* USER CODE BEGIN 2 */
LCD_Clear(Black);
LCD_SetTextColor(White);
LCD_SetBackColor(Black);
LCD_DisplayStringLine(Line1, (unsigned char*)" DATA ");
/* USER CODE END 2 */
char text[30];
sprintf(text, “%d %.2f”, i, f);
LCD_DisplayStringLine(Line2, (unsigned char*)text);
/ @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions
* @brief TIM Callbacks functions
* @{
*/
/* Callback in non blocking modes (Interrupt and DMA) */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_PeriodElapsedHalfCpltCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_IC_CaptureHalfCpltCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_TriggerCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_TriggerHalfCpltCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim);
#include “main.h”
/
* @brief 按键状态结构体
*/
struct keys
{
uint8_t judge_state; // 状态机标志,0: 检测到一个低电平;1:确实被按下;2:等待抬起
uint8_t key_state; // 按键是否被按下(信号来自GPIO输入)
uint8_t key_isPressed; // 按键被按下标志位
};
extern struct keys key[];
// void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
#endif
#include “interrupt.h”
struct keys key[4] = {0, 0, 0};
/
* @brief TIM定时器定时中断回调函数
*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM3)
{
key[0].key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0);
key[1].key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1);
key[2].key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2);
key[3].key_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
/* 部分自动生成代码 -----------------------------------------------------------*/
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include “main.h”
#include “tim.h”
#include “gpio.h”
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include “led.h”
#include “lcd.h”
#include “interrupt.h”
/* USER CODE END Includes */
/* 部分自动生成代码 -----------------------------------------------------------*/
/
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* USER CODE BEGIN Init */
LCD_Init();
/* USER CODE END Init */
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM3_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim3);
LCD_Clear(Black);
LCD_SetTextColor(White);
LCD_SetBackColor(Black);
LCD_DisplayStringLine(Line1, (unsigned char*)" DATA ");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
}
/* USER CODE END 3 */
}
#include “main.h”
/
* @brief 按键状态结构体
*/
struct keys
{
uint8_t judge_state; // 状态机标志,0: 检测到一个低电平;1:确实被按下;2:等待抬起
uint8_t key_state; // 按键是否被按下(信号来自GPIO输入)
uint8_t key_isPressed; // 按键短按标志位
uint8_t key_long_flag; // 按键长按标志位
uint32_t key_time; // 按键计时
};
extern struct keys key[];
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
#endif
#include “interrupt.h”
struct keys key[4] = {0, 0, 0, 0, 0};
/
* @brief TIM定时器定时中断回调函数
*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM3)
{
key[0].key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0);
key[1].key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1);
key[2].key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2);
key[3].key_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
if (key[i].key_long_flag == 1)
{
sprintf(text, “B%d long down.”, i + 1);
LCD_DisplayStringLine(Line4, (unsigned char*)text);
}
#include “main.h”
/
* @brief 按键状态结构体
*/
struct keys
{
uint8_t judge_state; // 状态机标志,0: 检测到一个低电平;1:确实被按下;2:等待抬起
uint8_t key_state; // 按键是否被按下(信号来自GPIO输入)
uint8_t key_isPressed; // 按键短按标志位
uint32_t key_double_click_time; // 双击计时器
uint8_t key_double_click_EN; // 双击计时器使能
uint8_t key_double_click_flag; // 双击标志位
};
extern struct keys key[];
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
#endif
#include “interrupt.h”
struct keys key[4] = {0};
/
* @brief TIM定时器定时中断回调函数
*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM3)
{
key[0].key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_0);
key[1].key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_1);
key[2].key_state = HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_2);
key[3].key_state = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_TIM3_Init();
MX_TIM16_Init();
MX_TIM17_Init();
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim3); // Key Detect
uint8_t PWM_PA6_Duty = 20;
__HAL_TIM_SetCompare(&htim16, TIM_CHANNEL_1, PWM_PA6_Duty);
uint8_t PWM_PA6_Duty = 20;
uint8_t PWM_PA7_Duty = 20;
/* USER CODE END PV */
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
void Key_Proc(void);
void Display_Proc(void);
/* USER CODE END PFP */
/* Some Code… */
/* USER CODE BEGIN 4 */
void Key_Proc(void)
{
if (key[0].key_isPressed == 1) // PB1
{
LCD_Clear(Black);
interface_num ++;
if (interface_num > 1)
{
interface_num = 0;
}
key[0].key_isPressed = 0;
}
if (key[1].key_isPressed == 1 && interface_num == 1) // PB2, Display Interface 1
{
LCD_Clear(Black);
PWM_PA6_Duty += 10;
if (PWM_PA6_Duty > 90)
{
PWM_PA6_Duty = 0;
}
}
if (key[2].key_isPressed == 1 && interface_num == 1) // PB3, Display Interface 1
{
LCD_Clear(Black);
PWM_PA7_Duty += 10;
if (PWM_PA7_Duty > 90)
{
PWM_PA7_Duty = 0;
}
void Display_Proc(void)
{
char text[20];
if (interface_num == 0) // Display Interface 1
{
// LCD_Clear(Black);
sprintf(text, " DATA ");
LCD_DisplayStringLine(Line1, (uint8_t *)text);
}
if (interface_num == 1) // Display Interface 2
{
// LCD_Clear(Black);
sprintf(text, " PARA ");
LCD_DisplayStringLine(Line1, (uint8_t *)text);
sprintf(text, " PA6:%d%% ", PWM_PA6_Duty);
LCD_DisplayStringLine(Line3, (uint8_t *)text);
sprintf(text, " PA7:%d%% ", PWM_PA7_Duty);
LCD_DisplayStringLine(Line4, (uint8_t *)text);
}
}
/* USER CODE END 4 */
/
* @brief 输入捕获中断回调函数
*/
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
if (htim->Instance == TIM2) // IC signal from TIM2_CH1 (PA15, controlled by R40)
{
if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2) {
TIM2_CCR2_val = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2);
HAL_TIM_IC_Start(htim, TIM_CHANNEL_2); // Restart CH2 IC
}
if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) {
TIM2_CCR1_val = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);
__HAL_TIM_SetCounter(htim, 0); // Can be done by TRGO Reset?
Freq_PA15 = ( / 80) / TIM2_CCR1_val;
Duty_PA15 = (double)TIM2_CCR2_val / (double)TIM2_CCR1_val * 100;
HAL_TIM_IC_Start(htim, TIM_CHANNEL_1); // Restart CH1 IC
}
}
if (htim->Instance == TIM3) // IC signal from TIM3_CH1 (PB4, controlled by R39)
{
if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_2) {
TIM3_CCR2_val = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_2);
HAL_TIM_IC_Start(htim, TIM_CHANNEL_2); // Restart CH2 IC
}
if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) {
}
void Display_Proc(void)
{
char text[20];
if (interface_num == 0) // Display Interface 1
{
// LCD_Clear(Black);
sprintf(text, " DATA ");
LCD_DisplayStringLine(Line1, (uint8_t *)text);
sprintf(text, " Freq1:%dHz ", Freq_PA15);
LCD_DisplayStringLine(Line3, (uint8_t *)text);
sprintf(text, " Duty1:%.1lf%% ", Duty_PA15);
LCD_DisplayStringLine(Line4, (uint8_t *)text);
sprintf(text, " Freq2:%dHz ", Freq_PB4);
LCD_DisplayStringLine(Line5, (uint8_t *)text);
sprintf(text, " Duty2:%.1lf%% ", Duty_PB4);
LCD_DisplayStringLine(Line6, (uint8_t *)text);
}
if (interface_num == 1) // Display Interface 2
{
// LCD_Clear(Black);
sprintf(text, " PARA ");
LCD_DisplayStringLine(Line1, (uint8_t *)text);
sprintf(text, " PA6:%d%% ", PWM_PA6_Duty);
LCD_DisplayStringLine(Line3, (uint8_t *)text);
sprintf(text, " PA7:%d%% ", PWM_PA7_Duty);
LCD_DisplayStringLine(Line4, (uint8_t *)text);
}
}
#include “main.h”
double BSP_ADC_GetValue(ADC_HandleTypeDef *hadc);
#endif
#include “BSP_adc.h”
double BSP_ADC_GetValue(ADC_HandleTypeDef *hadc)
{
uint16_t adc_value;
HAL_ADC_Start(hadc);
adc_value = HAL_ADC_GetValue(hadc);
}
void BSP_ADC_GetValue(void)
{
HAL_ADC_Start(&hadc2);
// 获取IN13的值
HAL_ADC_PollForConversion(&hadc2, 50);
PA4_adc_value = HAL_ADC_GetValue(&hadc2);
// 获取IN17的值
HAL_ADC_PollForConversion(&hadc2, 50);
PA5_adc_value = HAL_ADC_GetValue(&hadc2);
HAL_ADC_Stop(&hadc2);
PA4_Voltage = (double)PA4_adc_value / 4096 * 3.3;
PA5_Voltage = (double)PA5_adc_value / 4096 * 3.3;
}
void EEPROM_WriteByte(uint8_t addr, uint8_t data)
{
I2CStart();
I2CSendByte(0xA0); // slave device address, write command
I2CWaitAck();
I2CSendByte(addr); // byte address
I2CWaitAck();
I2CSendByte(data);
I2CWaitAck();
I2CStop();
}
uint8_t EEPROM_ReadByte(uint8_t addr)
{
uint8_t data_temp;
}
if (key[3].key_isPressed == 1)
{
LCD_Clear(Black);
}
/* some code… */
void UART_Send(void)
{
char send_data[20];
sprintf(send_data, “Freq = %d ”, Freq_PA15);
HAL_UART_Transmit(&huart1, (uint8_t *)send_data, strlen(send_data), 50);
}
char ReceiveString[22];
uint8_t RxByte;
uint8_t RxIndex;
uint8_t RxDoneFlag;
/
* @brief 串口中断回调函数
*/
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
ReceiveString[RxIndex ++] = RxByte; // RxIndex plus after assignment, first Receive is in main function
BSP_LED_Disp(0x01);
if (RxByte == ‘ ’ || RxIndex == 22)
{
RxDoneFlag = 1;
}
#include <string.h>
/* Some code… */
/* USER CODE BEGIN PV */
char car_type[5];
char car_data[5];
char car_time[13];
/* USER CODE END PV */
/* Some code… */
void UART_Receive_Proc(void)
{
if (RxDoneFlag == 1)
{
if (RxIndex == 22)
{
sscanf(ReceiveString, “%4s:%4s:%12s”, car_type, car_data, car_time);
}
else
{
char send_data[20];
sprintf(send_data, “Error ”);
HAL_UART_Transmit(&huart1, (uint8_t *)send_data, strlen(send_data), 50);
}
RxIndex = 0;
memset(ReceiveString, 0, 22);
RxDoneFlag = 0;
}
}
/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP */
void Key_Proc(void);
void Display_Proc(void);
/* USER CODE END PFP */
/* Some Code… */
/* USER CODE BEGIN 4 */
void Key_Proc(void)
{
if (key[0].key_isPressed == 1) // PB1
{
LCD_Clear(Black);
}
if (key[1].key_isPressed == 1 && interface_num == 1) // PB2, Display Interface 2
{
LCD_Clear(Black);
}
if (key[2].key_isPressed == 1 && interface_num == 1) // PB3, Display Interface 2
{
LCD_Clear(Black);
void Display_Proc(void)
{
char text[20];
if (interface_num == 0) // Display Interface 1
{
// LCD_Clear(Black);
sprintf(text, " DATA ");
LCD_DisplayStringLine(Line1, (uint8_t *)text);
}
if (interface_num == 1) // Display Interface 2
{
// LCD_Clear(Black);
sprintf(text, " PARA ");
LCD_DisplayStringLine(Line1, (uint8_t *)text);
}
}
/* USER CODE END 4 */
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/hd-api/32039.html