clock

Dependencies:   mbed

Committer:
donghuoyinzi
Date:
Tue May 22 09:10:05 2018 +0000
Revision:
3:b8766d623f01
Parent:
2:e54d9d87c6cb
0522

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donghuoyinzi 0:17e9016529cf 1 #include "myf401.h"
donghuoyinzi 0:17e9016529cf 2
donghuoyinzi 3:b8766d623f01 3 //IWDG_HandleTypeDef f401Act::hiwdg; //iwdg instance
donghuoyinzi 3:b8766d623f01 4 //TIM_HandleTypeDef htim2;
donghuoyinzi 0:17e9016529cf 5
donghuoyinzi 0:17e9016529cf 6 int f401Act::bufpow=0;
donghuoyinzi 0:17e9016529cf 7 char f401Act::bufR[10]={0x00}; char f401Act::bufT[10]={0x00};
donghuoyinzi 0:17e9016529cf 8 int f401Act::cnt=0;
donghuoyinzi 0:17e9016529cf 9
donghuoyinzi 0:17e9016529cf 10 /*******************************
donghuoyinzi 0:17e9016529cf 11 Fun.: f401pc initializations,include iwdg\system tick\key interrupt。
donghuoyinzi 0:17e9016529cf 12 Desc.: 含低功耗,使用内部低功耗振荡器,频率1.048MHz,仅启用PB口Sleep模式115uA,启用PA、PB口Sleep模式131uA
donghuoyinzi 0:17e9016529cf 13 Auth. Vesion:2017.7.2
donghuoyinzi 3:b8766d623f01 14 ******************************
donghuoyinzi 0:17e9016529cf 15 void f401Act::init(void)
donghuoyinzi 0:17e9016529cf 16 {
donghuoyinzi 0:17e9016529cf 17 HAL_Init(); //HAL库初始化
donghuoyinzi 0:17e9016529cf 18 SystemClock_Config(); //系统时钟初始化;内部低功耗振荡器,1.048MHz
donghuoyinzi 0:17e9016529cf 19 HAL_Delay(500); //调试延时,防止一上电进入休眠后,无法下载程序。
donghuoyinzi 0:17e9016529cf 20 HAL_Delay(500);
donghuoyinzi 0:17e9016529cf 21 MX_GPIO_Init(); //IO口初始化
donghuoyinzi 0:17e9016529cf 22 MY_GPIO_Config(); //专属IO初始化配置
donghuoyinzi 0:17e9016529cf 23
donghuoyinzi 0:17e9016529cf 24 init_wdg();
donghuoyinzi 3:b8766d623f01 25 }*/
donghuoyinzi 0:17e9016529cf 26
donghuoyinzi 3:b8766d623f01 27 /** 系统时钟配置函数 *
donghuoyinzi 0:17e9016529cf 28 void f401Act::SystemClock_Config(void)
donghuoyinzi 0:17e9016529cf 29 {
donghuoyinzi 0:17e9016529cf 30 RCC_OscInitTypeDef RCC_OscInitStruct;
donghuoyinzi 0:17e9016529cf 31 RCC_ClkInitTypeDef RCC_ClkInitStruct;
donghuoyinzi 0:17e9016529cf 32
donghuoyinzi 0:17e9016529cf 33
donghuoyinzi 0:17e9016529cf 34 __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1); //Configure the main internal regulator output voltage
donghuoyinzi 0:17e9016529cf 35
donghuoyinzi 3:b8766d623f01 36 //RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI; //Initializes the CPU, AHB and APB busses clocks,使用内部低功耗振荡器
donghuoyinzi 3:b8766d623f01 37 //RCC_OscInitStruct.MSIState = RCC_MSI_ON;
donghuoyinzi 3:b8766d623f01 38 //RCC_OscInitStruct.MSICalibrationValue = 0;
donghuoyinzi 3:b8766d623f01 39 //RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_4; //配置振荡器频率为1.048MHz
donghuoyinzi 0:17e9016529cf 40 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
donghuoyinzi 0:17e9016529cf 41 if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
donghuoyinzi 0:17e9016529cf 42 {
donghuoyinzi 0:17e9016529cf 43 //_Error_Handler(__FILE__, __LINE__);
donghuoyinzi 0:17e9016529cf 44 }
donghuoyinzi 0:17e9016529cf 45
donghuoyinzi 0:17e9016529cf 46 RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK //Initializes the CPU, AHB and APB busses clocks
donghuoyinzi 0:17e9016529cf 47 |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
donghuoyinzi 3:b8766d623f01 48 //RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
donghuoyinzi 0:17e9016529cf 49 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
donghuoyinzi 0:17e9016529cf 50 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
donghuoyinzi 0:17e9016529cf 51 RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
donghuoyinzi 0:17e9016529cf 52
donghuoyinzi 0:17e9016529cf 53 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
donghuoyinzi 0:17e9016529cf 54 {
donghuoyinzi 0:17e9016529cf 55 //_Error_Handler(__FILE__, __LINE__);
donghuoyinzi 0:17e9016529cf 56 }
donghuoyinzi 0:17e9016529cf 57
donghuoyinzi 0:17e9016529cf 58 HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); //Configure the Systick interrupt time
donghuoyinzi 0:17e9016529cf 59
donghuoyinzi 0:17e9016529cf 60 HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); //Configure the Systick
donghuoyinzi 0:17e9016529cf 61
donghuoyinzi 0:17e9016529cf 62 HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); //SysTick_IRQn interrupt configuration
donghuoyinzi 0:17e9016529cf 63 }
donghuoyinzi 3:b8766d623f01 64 */
donghuoyinzi 0:17e9016529cf 65
donghuoyinzi 3:b8766d623f01 66 /** IO初始化配置函数 *
donghuoyinzi 0:17e9016529cf 67 void f401Act::MX_GPIO_Init(void)
donghuoyinzi 0:17e9016529cf 68 {
donghuoyinzi 0:17e9016529cf 69 GPIO_InitTypeDef GPIO_InitStruct;
donghuoyinzi 0:17e9016529cf 70
donghuoyinzi 0:17e9016529cf 71 // __HAL_RCC_GPIOA_CLK_ENABLE(); //GPIO Ports Clock Enable
donghuoyinzi 0:17e9016529cf 72 __HAL_RCC_GPIOB_CLK_ENABLE();
donghuoyinzi 0:17e9016529cf 73 // __HAL_RCC_GPIOC_CLK_ENABLE();
donghuoyinzi 0:17e9016529cf 74
donghuoyinzi 0:17e9016529cf 75 GPIO_InitStruct.Pin = GPIO_PIN_All; // 3.3V电源控制输出,上拉VBAT,开漏输出。
donghuoyinzi 0:17e9016529cf 76 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
donghuoyinzi 0:17e9016529cf 77 GPIO_InitStruct.Pull = GPIO_NOPULL;
donghuoyinzi 0:17e9016529cf 78 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
donghuoyinzi 0:17e9016529cf 79 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
donghuoyinzi 0:17e9016529cf 80
donghuoyinzi 0:17e9016529cf 81 GPIO_InitStruct.Pin = GPIO_PIN_0 |GPIO_PIN_1; //LED指示灯,推挽输出。
donghuoyinzi 0:17e9016529cf 82 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
donghuoyinzi 0:17e9016529cf 83 GPIO_InitStruct.Pull = GPIO_NOPULL;
donghuoyinzi 0:17e9016529cf 84 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
donghuoyinzi 0:17e9016529cf 85 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
donghuoyinzi 0:17e9016529cf 86
donghuoyinzi 0:17e9016529cf 87 GPIO_InitStruct.Pin = GPIO_PIN_9 ; // BC95复位输出,上拉3.3V,开漏输出。
donghuoyinzi 0:17e9016529cf 88 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD;
donghuoyinzi 0:17e9016529cf 89 GPIO_InitStruct.Pull = GPIO_NOPULL;
donghuoyinzi 0:17e9016529cf 90 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
donghuoyinzi 0:17e9016529cf 91 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
donghuoyinzi 0:17e9016529cf 92
donghuoyinzi 0:17e9016529cf 93 GPIO_InitStruct.Pin = GPIO_PIN_10 ; // 串口接收。上拉3.3V,配置浮空输入
donghuoyinzi 0:17e9016529cf 94 GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
donghuoyinzi 0:17e9016529cf 95 GPIO_InitStruct.Pull = GPIO_NOPULL;
donghuoyinzi 0:17e9016529cf 96 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
donghuoyinzi 0:17e9016529cf 97 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
donghuoyinzi 0:17e9016529cf 98 }
donghuoyinzi 3:b8766d623f01 99 */
donghuoyinzi 0:17e9016529cf 100 /** IO定制化配置函数-基本IO初始电平设置
donghuoyinzi 3:b8766d623f01 101 根据实际使用的功能进行配置,原则是不用或者空闲的引脚,上拉的置高,下拉的置低。*
donghuoyinzi 0:17e9016529cf 102 void f401Act::MY_GPIO_Config(void)
donghuoyinzi 0:17e9016529cf 103 {
donghuoyinzi 0:17e9016529cf 104
donghuoyinzi 0:17e9016529cf 105 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET); //不用LED配置为高
donghuoyinzi 0:17e9016529cf 106
donghuoyinzi 0:17e9016529cf 107 //HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,RESET); //3.3V电源
donghuoyinzi 0:17e9016529cf 108
donghuoyinzi 0:17e9016529cf 109 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //开漏输出,上拉3.3,配置为高
donghuoyinzi 0:17e9016529cf 110
donghuoyinzi 2:e54d9d87c6cb 111 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_All,GPIO_PIN_SET); //大部分使用的IO都是上拉,先全部配置为高,再去配置其他特殊引脚。
donghuoyinzi 0:17e9016529cf 112 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_14,GPIO_PIN_RESET); //10K下拉,低功耗需要配置为低,否则消耗180uA。
donghuoyinzi 3:b8766d623f01 113 }*/
donghuoyinzi 0:17e9016529cf 114
donghuoyinzi 3:b8766d623f01 115 /**** initializations of watchdog********
donghuoyinzi 0:17e9016529cf 116 void f401Act::init_wdg (void)
donghuoyinzi 0:17e9016529cf 117 {
donghuoyinzi 0:17e9016529cf 118 hiwdg.Instance=IWDG;
donghuoyinzi 2:e54d9d87c6cb 119 hiwdg.Init.Prescaler=IWDG_PRESCALER_16; //分频因子[4,8,16,32,64,128,256,256] 对应400ms/800ms/1600ms/3200ms/6400ms/12800ms/25600ms
donghuoyinzi 0:17e9016529cf 120 hiwdg.Init.Reload=4095; //递减计数0~0XFFF
donghuoyinzi 0:17e9016529cf 121 HAL_IWDG_Init(&hiwdg);
donghuoyinzi 3:b8766d623f01 122 }*/
donghuoyinzi 0:17e9016529cf 123
donghuoyinzi 0:17e9016529cf 124 /*****************************************
donghuoyinzi 0:17e9016529cf 125 Fun.: pc ready。
donghuoyinzi 0:17e9016529cf 126 Desc.:
donghuoyinzi 0:17e9016529cf 127 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 128 *****************************************/
donghuoyinzi 0:17e9016529cf 129 void f401Act::ready(void)
donghuoyinzi 0:17e9016529cf 130 {
donghuoyinzi 0:17e9016529cf 131 know::uart1.baud(9600);
donghuoyinzi 0:17e9016529cf 132 know::uart1.attach(&isr_pc,SerialBase::RxIrq);
donghuoyinzi 0:17e9016529cf 133 }
donghuoyinzi 0:17e9016529cf 134
donghuoyinzi 0:17e9016529cf 135 /*****************************************
donghuoyinzi 0:17e9016529cf 136 Fun.: pc revoke。
donghuoyinzi 0:17e9016529cf 137 Desc.:
donghuoyinzi 0:17e9016529cf 138 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 139 *****************************************/
donghuoyinzi 0:17e9016529cf 140 char f401Act::revoke(void)
donghuoyinzi 0:17e9016529cf 141 {
donghuoyinzi 0:17e9016529cf 142 know::uart1.attach(0,SerialBase::RxIrq);
donghuoyinzi 0:17e9016529cf 143 return 0;
donghuoyinzi 0:17e9016529cf 144 }
donghuoyinzi 0:17e9016529cf 145
donghuoyinzi 0:17e9016529cf 146 /*****************************************
donghuoyinzi 0:17e9016529cf 147 Fun.: pow get。
donghuoyinzi 0:17e9016529cf 148 Desc.:
donghuoyinzi 0:17e9016529cf 149 Auth. Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 150 *****************************************/
donghuoyinzi 0:17e9016529cf 151 void f401Act::get_pow(void)
donghuoyinzi 0:17e9016529cf 152 {
donghuoyinzi 0:17e9016529cf 153
donghuoyinzi 0:17e9016529cf 154 }
donghuoyinzi 0:17e9016529cf 155
donghuoyinzi 0:17e9016529cf 156 /*****************************************
donghuoyinzi 0:17e9016529cf 157 Fun.: soft reset。
donghuoyinzi 0:17e9016529cf 158 Desc.:
donghuoyinzi 0:17e9016529cf 159 Auth.:ZY
donghuoyinzi 0:17e9016529cf 160 Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 161 *****************************************/
donghuoyinzi 0:17e9016529cf 162 void f401Act:: put_rst (void)
donghuoyinzi 0:17e9016529cf 163 {
donghuoyinzi 0:17e9016529cf 164 while(1);
donghuoyinzi 0:17e9016529cf 165 }
donghuoyinzi 0:17e9016529cf 166
donghuoyinzi 0:17e9016529cf 167 /*****************************************
donghuoyinzi 0:17e9016529cf 168 Fun.: cpu sleep。
donghuoyinzi 0:17e9016529cf 169 Desc.:
donghuoyinzi 0:17e9016529cf 170 Auth. Vesion:2017.7.2
donghuoyinzi 3:b8766d623f01 171 ****************************************
donghuoyinzi 0:17e9016529cf 172 void f401Act::put_slepy(void)
donghuoyinzi 0:17e9016529cf 173 {
donghuoyinzi 0:17e9016529cf 174 __HAL_RCC_GPIOA_CLK_DISABLE(); //关闭引脚时钟
donghuoyinzi 0:17e9016529cf 175 __HAL_RCC_GPIOB_CLK_DISABLE();
donghuoyinzi 0:17e9016529cf 176
donghuoyinzi 0:17e9016529cf 177 HAL_SuspendTick(); //挂起系统时钟,HAL_ResumeTick();
donghuoyinzi 0:17e9016529cf 178
donghuoyinzi 0:17e9016529cf 179 HAL_PWR_EnterSLEEPMode(PWR_LOWPOWERREGULATOR_ON, PWR_SLEEPENTRY_WFI);
donghuoyinzi 0:17e9016529cf 180 //PWR_LOWPOWERREGULATOR_ON 调压器低功耗运行(中断可唤醒方式)。PWR_MAINREGULATOR_ON 调压器正常运行。相差40uA左右。
donghuoyinzi 0:17e9016529cf 181
donghuoyinzi 0:17e9016529cf 182 //HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); //SLEEP
donghuoyinzi 0:17e9016529cf 183 //HAL_PWR_EnterSTANDBYMode(); //STABDBY
donghuoyinzi 0:17e9016529cf 184 //HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI); //STOP
donghuoyinzi 3:b8766d623f01 185 }*/
donghuoyinzi 0:17e9016529cf 186
donghuoyinzi 0:17e9016529cf 187 /*****************************************
donghuoyinzi 0:17e9016529cf 188 Fun.: reflesh iwdg。
donghuoyinzi 0:17e9016529cf 189 Desc.:
donghuoyinzi 0:17e9016529cf 190 Auth. Vesion:2017.7.2
donghuoyinzi 3:b8766d623f01 191 ****************************************
donghuoyinzi 0:17e9016529cf 192 void f401Act:: put_rwdg(void)
donghuoyinzi 0:17e9016529cf 193 {
donghuoyinzi 0:17e9016529cf 194 HAL_IWDG_Refresh(&hiwdg); //reflesh iwdg
donghuoyinzi 0:17e9016529cf 195 }
donghuoyinzi 3:b8766d623f01 196 */
donghuoyinzi 0:17e9016529cf 197 /*****************************************
donghuoyinzi 0:17e9016529cf 198 Fun.: pc getc ISR。
donghuoyinzi 0:17e9016529cf 199 Desc.:
donghuoyinzi 0:17e9016529cf 200 Auth.Vesion:2017.7.2
donghuoyinzi 0:17e9016529cf 201 *****************************************/
donghuoyinzi 0:17e9016529cf 202 void f401Act::isr_pc(void)
donghuoyinzi 0:17e9016529cf 203 {
donghuoyinzi 0:17e9016529cf 204 char bufx;
donghuoyinzi 0:17e9016529cf 205
donghuoyinzi 0:17e9016529cf 206 bufx=know::uart1.getc();
donghuoyinzi 0:17e9016529cf 207 bufR[cnt]=bufx;
donghuoyinzi 0:17e9016529cf 208 cnt++;
donghuoyinzi 0:17e9016529cf 209 if(cnt>10) cnt=0;
donghuoyinzi 0:17e9016529cf 210 }
donghuoyinzi 0:17e9016529cf 211