yan zhang
/
NB_CLOCK_180505
clock
Embed:
(wiki syntax)
Show/hide line numbers
myf401.cpp
00001 #include "myf401.h" 00002 00003 //IWDG_HandleTypeDef f401Act::hiwdg; //iwdg instance 00004 //TIM_HandleTypeDef htim2; 00005 00006 int f401Act::bufpow=0; 00007 char f401Act::bufR[10]={0x00}; char f401Act::bufT[10]={0x00}; 00008 int f401Act::cnt=0; 00009 00010 /******************************* 00011 Fun.: f401pc initializations,include iwdg\system tick\key interrupt。 00012 Desc.: 含低功耗,使用内部低功耗振荡器,频率1.048MHz,仅启用PB口Sleep模式115uA,启用PA、PB口Sleep模式131uA 00013 Auth. Vesion:2017.7.2 00014 ****************************** 00015 void f401Act::init(void) 00016 { 00017 HAL_Init(); //HAL库初始化 00018 SystemClock_Config(); //系统时钟初始化;内部低功耗振荡器,1.048MHz 00019 HAL_Delay(500); //调试延时,防止一上电进入休眠后,无法下载程序。 00020 HAL_Delay(500); 00021 MX_GPIO_Init(); //IO口初始化 00022 MY_GPIO_Config(); //专属IO初始化配置 00023 00024 init_wdg(); 00025 }*/ 00026 00027 /** 系统时钟配置函数 * 00028 void f401Act::SystemClock_Config(void) 00029 { 00030 RCC_OscInitTypeDef RCC_OscInitStruct; 00031 RCC_ClkInitTypeDef RCC_ClkInitStruct; 00032 00033 00034 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); //Configure the main internal regulator output voltage 00035 00036 //RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI; //Initializes the CPU, AHB and APB busses clocks,使用内部低功耗振荡器 00037 //RCC_OscInitStruct.MSIState = RCC_MSI_ON; 00038 //RCC_OscInitStruct.MSICalibrationValue = 0; 00039 //RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_4; //配置振荡器频率为1.048MHz 00040 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE; 00041 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) 00042 { 00043 //_Error_Handler(__FILE__, __LINE__); 00044 } 00045 00046 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK //Initializes the CPU, AHB and APB busses clocks 00047 |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; 00048 //RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI; 00049 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; 00050 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; 00051 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; 00052 00053 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK) 00054 { 00055 //_Error_Handler(__FILE__, __LINE__); 00056 } 00057 00058 HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); //Configure the Systick interrupt time 00059 00060 HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); //Configure the Systick 00061 00062 HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); //SysTick_IRQn interrupt configuration 00063 } 00064 */ 00065 00066 /** IO初始化配置函数 * 00067 void f401Act::MX_GPIO_Init(void) 00068 { 00069 GPIO_InitTypeDef GPIO_InitStruct; 00070 00071 // __HAL_RCC_GPIOA_CLK_ENABLE(); //GPIO Ports Clock Enable 00072 __HAL_RCC_GPIOB_CLK_ENABLE(); 00073 // __HAL_RCC_GPIOC_CLK_ENABLE(); 00074 00075 GPIO_InitStruct.Pin = GPIO_PIN_All; // 3.3V电源控制输出,上拉VBAT,开漏输出。 00076 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 00077 GPIO_InitStruct.Pull = GPIO_NOPULL; 00078 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 00079 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 00080 00081 GPIO_InitStruct.Pin = GPIO_PIN_0 |GPIO_PIN_1; //LED指示灯,推挽输出。 00082 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 00083 GPIO_InitStruct.Pull = GPIO_NOPULL; 00084 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 00085 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 00086 00087 GPIO_InitStruct.Pin = GPIO_PIN_9 ; // BC95复位输出,上拉3.3V,开漏输出。 00088 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; 00089 GPIO_InitStruct.Pull = GPIO_NOPULL; 00090 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 00091 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 00092 00093 GPIO_InitStruct.Pin = GPIO_PIN_10 ; // 串口接收。上拉3.3V,配置浮空输入 00094 GPIO_InitStruct.Mode = GPIO_MODE_INPUT; 00095 GPIO_InitStruct.Pull = GPIO_NOPULL; 00096 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; 00097 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); 00098 } 00099 */ 00100 /** IO定制化配置函数-基本IO初始电平设置 00101 根据实际使用的功能进行配置,原则是不用或者空闲的引脚,上拉的置高,下拉的置低。* 00102 void f401Act::MY_GPIO_Config(void) 00103 { 00104 00105 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET); //不用LED配置为高 00106 00107 //HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,RESET); //3.3V电源 00108 00109 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //开漏输出,上拉3.3,配置为高 00110 00111 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_All,GPIO_PIN_SET); //大部分使用的IO都是上拉,先全部配置为高,再去配置其他特殊引脚。 00112 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_14,GPIO_PIN_RESET); //10K下拉,低功耗需要配置为低,否则消耗180uA。 00113 }*/ 00114 00115 /**** initializations of watchdog******** 00116 void f401Act::init_wdg (void) 00117 { 00118 hiwdg.Instance=IWDG; 00119 hiwdg.Init.Prescaler=IWDG_PRESCALER_16; //分频因子[4,8,16,32,64,128,256,256] 对应400ms/800ms/1600ms/3200ms/6400ms/12800ms/25600ms 00120 hiwdg.Init.Reload=4095; //递减计数0~0XFFF 00121 HAL_IWDG_Init(&hiwdg); 00122 }*/ 00123 00124 /***************************************** 00125 Fun.: pc ready。 00126 Desc.: 00127 Auth. Vesion:2017.7.2 00128 *****************************************/ 00129 void f401Act::ready(void) 00130 { 00131 know::uart1.baud(9600); 00132 know::uart1.attach(&isr_pc,SerialBase::RxIrq); 00133 } 00134 00135 /***************************************** 00136 Fun.: pc revoke。 00137 Desc.: 00138 Auth. Vesion:2017.7.2 00139 *****************************************/ 00140 char f401Act::revoke(void) 00141 { 00142 know::uart1.attach(0,SerialBase::RxIrq); 00143 return 0; 00144 } 00145 00146 /***************************************** 00147 Fun.: pow get。 00148 Desc.: 00149 Auth. Vesion:2017.7.2 00150 *****************************************/ 00151 void f401Act::get_pow(void) 00152 { 00153 00154 } 00155 00156 /***************************************** 00157 Fun.: soft reset。 00158 Desc.: 00159 Auth.:ZY 00160 Vesion:2017.7.2 00161 *****************************************/ 00162 void f401Act:: put_rst (void) 00163 { 00164 while(1); 00165 } 00166 00167 /***************************************** 00168 Fun.: cpu sleep。 00169 Desc.: 00170 Auth. Vesion:2017.7.2 00171 **************************************** 00172 void f401Act::put_slepy(void) 00173 { 00174 __HAL_RCC_GPIOA_CLK_DISABLE(); //关闭引脚时钟 00175 __HAL_RCC_GPIOB_CLK_DISABLE(); 00176 00177 HAL_SuspendTick(); //挂起系统时钟,HAL_ResumeTick(); 00178 00179 HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI); 00180 //PWR_LOWPOWERREGULATOR_ON 调压器低功耗运行(中断可唤醒方式)。PWR_MAINREGULATOR_ON 调压器正常运行。相差40uA左右。 00181 00182 //HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); //SLEEP 00183 //HAL_PWR_EnterSTANDBYMode(); //STABDBY 00184 //HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI); //STOP 00185 }*/ 00186 00187 /***************************************** 00188 Fun.: reflesh iwdg。 00189 Desc.: 00190 Auth. Vesion:2017.7.2 00191 **************************************** 00192 void f401Act:: put_rwdg(void) 00193 { 00194 HAL_IWDG_Refresh(&hiwdg); //reflesh iwdg 00195 } 00196 */ 00197 /***************************************** 00198 Fun.: pc getc ISR。 00199 Desc.: 00200 Auth.Vesion:2017.7.2 00201 *****************************************/ 00202 void f401Act::isr_pc(void) 00203 { 00204 char bufx; 00205 00206 bufx=know::uart1.getc(); 00207 bufR[cnt]=bufx; 00208 cnt++; 00209 if(cnt>10) cnt=0; 00210 } 00211
Generated on Sun Jul 24 2022 03:33:11 by 1.7.2