<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p>BSP_LED_Lock();<br /> LED_DATA_SAVE = LED_data;<br /> }</p>
讯享网
讯享网
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 /
/ Configure the system clock /
SystemClock_Config();
/ 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);
讯享网
#ifndef __INTERRUPTH
#define __INTERRUPTH
#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——————————————————–/
/ Reset of all peripherals, Initializes the Flash interface and the Systick. /
HAL_Init();
/ USER CODE BEGIN Init /
LCD_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_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 */
}
#ifndef __INTERRUPTH
#define __INTERRUPTH
#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);
}
讯享网
#ifndef __INTERRUPTH
#define INTERRUPTH
#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);
/* USER CODE BEGIN PV /
uint8_t interface_num = 0; // interface number, 0 for first interface, 1 for another
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);
}
}
#ifndef __BSP_ADCH
#define __BSP_ADCH
#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 */
讯享网

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/139414.html