CELIS/HARDWARE/LED/led.c
lidun 7a7daad23a
完成UDS升级
Signed-off-by: lidun <1084178170@qq.com>
2024-01-30 11:31:27 +08:00

168 lines
5.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "led.h"
#include "stm32f10x_iwdg.h"
#include "sd.h"
#define WWDG_REFRESH (0x7F)
uint8_t wwdg_int_cnt = 0;
//LED IO初始化
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE); //使能PB,PE,PD端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //LED0-->PB.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
GPIO_SetBits(GPIOA,GPIO_Pin_9); //PB.5 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //LED0-->PB.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
GPIO_SetBits(GPIOA,GPIO_Pin_0); //PB.5 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_10; //LED0-->PB.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
GPIO_SetBits(GPIOA,GPIO_Pin_1); //PB.5 输出高
GPIO_ResetBits(GPIOA,GPIO_Pin_10); // pwr5v open
//KC 1 2 3 4 5
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_7; //
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_ResetBits(GPIOC,GPIO_Pin_5); //PB.5 输出高
GPIO_SetBits(GPIOC,GPIO_Pin_7); // 1043 ENable
// GPIO_ResetBits(GPIOC,GPIO_Pin_7); // 1043 DISENable
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2 |GPIO_Pin_14|GPIO_Pin_9|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_9); // pwr3.3v close
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
GPIO_ResetBits(GPIOB,GPIO_Pin_1);
GPIO_ResetBits(GPIOB,GPIO_Pin_2);
GPIO_ResetBits(GPIOB,GPIO_Pin_14);
GPIO_ResetBits(GPIOB,GPIO_Pin_5); // can_en open
// //SD卡是否插入检测脚
// GPIO_InitStructure.GPIO_Pin = SD_INSERT_PIN;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //PC4
// GPIO_Init(SD_INSERT_PORT, &GPIO_InitStructure);//初始化GPIOC
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; // A+ detect
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOC
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; // Relay detect
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // Acc detect
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_NoJTRST, ENABLE); // 释放PB4
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 ; //
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_4); // 1043 work
BKP_TamperPinCmd(DISABLE); /* 关闭入侵检测功能,PC13可以用作普通IO*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; // 1043 Can_int
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC
}
/*
* 设置 IWDG 的超时时间
* Tout = prv/40 * rlv (s)
* prv可以是[4,8,16,32,64,128,256]
* prv:预分频器值,取值如下:
* @arg IWDG_Prescaler_4: IWDG prescaler set to 4
* @arg IWDG_Prescaler_8: IWDG prescaler set to 8
* @arg IWDG_Prescaler_16: IWDG prescaler set to 16
* @arg IWDG_Prescaler_32: IWDG prescaler set to 32
* @arg IWDG_Prescaler_64: IWDG prescaler set to 64
* @arg IWDG_Prescaler_128: IWDG prescaler set to 128
* @arg IWDG_Prescaler_256: IWDG prescaler set to 256
*
* rlv:预分频器值取值范围为0-0XFFF
* 函数调用举例:
* IWDG_Config(IWDG_Prescaler_64 ,625); // IWDG 1s 超时溢出
*/
void IWDG_Config(uint8_t prv ,uint16_t rlv)
{
// 使能 预分频寄存器PR和重装载寄存器RLR可写
IWDG_WriteAccessCmd( IWDG_WriteAccess_Enable );
// 设置预分频器值
IWDG_SetPrescaler( prv );
// 设置重装载寄存器值
IWDG_SetReload( rlv );
// 把重装载寄存器的值放到计数器中
IWDG_ReloadCounter();
// 使能 IWDG
IWDG_Enable();
}
// 喂狗
void IWDG_Feed(void)
{
// 把重装载寄存器的值放到计数器中喂狗防止IWDG复位
// 当计数器的值减到0的时候会产生系统复位
//IWDG_ReloadCounter();
WWDG->CR = WWDG_REFRESH;
wwdg_int_cnt = 0;
}
void IWDG_Init(void) // use window dog
{
// IWDG 1s 超时溢出
//IWDG_Config(IWDG_Prescaler_64 ,625);
RCC->APB1ENR |= RCC_APB1ENR_WWDGEN;
WWDG->CFR = WWDG_CFR_EWI | WWDG_CFR_WDGTB | 0x7f; //使能EWI中断8分频//
WWDG->CR = WWDG_REFRESH;
WWDG->CR |= WWDG_CR_WDGA;
NVIC_SetPriority(WWDG_IRQn, 0);
NVIC_EnableIRQ(WWDG_IRQn);
////DebugOut("WWDG init ok\r\n",0, PCPRINTF);
}
void WWDG_IRQHandler(void)////
{
WWDG->SR = 0;
//#if (WDG_TYPE == WDG_WWDG)
wwdg_int_cnt++;
if (wwdg_int_cnt <= 30) // 15
{
WWDG->CR = WWDG_REFRESH;
}
//#endif
}