yan zhang
/
NB_CLOCK_180505
clock
myMapPlat/myf401.cpp@2:e54d9d87c6cb, 2018-05-14 (annotated)
- Committer:
- donghuoyinzi
- Date:
- Mon May 14 00:04:42 2018 +0000
- Revision:
- 2:e54d9d87c6cb
- Parent:
- 0:17e9016529cf
- Child:
- 3:b8766d623f01
0514
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
donghuoyinzi | 0:17e9016529cf | 1 | #include "myf401.h" |
donghuoyinzi | 0:17e9016529cf | 2 | |
donghuoyinzi | 0:17e9016529cf | 3 | IWDG_HandleTypeDef f401Act::hiwdg; //iwdg instance |
donghuoyinzi | 0:17e9016529cf | 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 | 0:17e9016529cf | 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 | 0:17e9016529cf | 25 | } |
donghuoyinzi | 0:17e9016529cf | 26 | |
donghuoyinzi | 0:17e9016529cf | 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 | 0:17e9016529cf | 36 | RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI; //Initializes the CPU, AHB and APB busses clocks,使用内部低功耗振荡器 |
donghuoyinzi | 0:17e9016529cf | 37 | RCC_OscInitStruct.MSIState = RCC_MSI_ON; |
donghuoyinzi | 0:17e9016529cf | 38 | RCC_OscInitStruct.MSICalibrationValue = 0; |
donghuoyinzi | 0:17e9016529cf | 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 | 0:17e9016529cf | 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 | 0:17e9016529cf | 64 | |
donghuoyinzi | 0:17e9016529cf | 65 | |
donghuoyinzi | 0:17e9016529cf | 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 | 0:17e9016529cf | 99 | |
donghuoyinzi | 0:17e9016529cf | 100 | /** IO定制化配置函数-基本IO初始电平设置 |
donghuoyinzi | 0:17e9016529cf | 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 | 0:17e9016529cf | 113 | } |
donghuoyinzi | 0:17e9016529cf | 114 | |
donghuoyinzi | 0:17e9016529cf | 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 | 0:17e9016529cf | 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 | 0:17e9016529cf | 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 | 0:17e9016529cf | 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 | 0:17e9016529cf | 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 | 0:17e9016529cf | 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 |