clock

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers myf401.cpp Source File

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