/** ****************************************************************************** * @file Project/main.c * @author MCD Application Team * @version V2.3.0 * @date 16-June-2017 * @brief Main program body ****************************************************************************** * @attention * *

© COPYRIGHT 2014 STMicroelectronics

* * Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); * You may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.st.com/software_license_agreement_liberty_v2 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ****************************************************************************** */ /* Includes ------------------------------------------------------------------*/ #include "stm8s.h" #include "hw_init.h" #include "sc7a20.h" #include "key.h" #include "led.h" #include "tasks.h" /* Private defines -----------------------------------------------------------*/ uint32_t Global_Timing_Counter; uint8_t PeriodCnt_5ms; uint8_t PeriodCnt_20ms; uint8_t PeriodCnt_100ms; uint16_t AD_Value; uint8_t AD_FinishFlag = 0; /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/ void main(void) { /* Hardware Init */ HW_Init(); SC7A20_Init(); /* Task Init */ Global_Timing_Counter = 0U; PeriodCnt_5ms = 0; PeriodCnt_20ms = 0; PeriodCnt_100ms = 0; /* Infinite loop */ while (1) { //5ms if(PeriodCnt_5ms >= 5) { PeriodCnt_5ms = 0; taskA(); //按键扫描 } //10ms if(PeriodCnt_20ms >= 20) { PeriodCnt_20ms = 0; taskB(); //加速度读取 } //100ms if(PeriodCnt_100ms >= 100) { PeriodCnt_100ms = 0; taskC(); //AD采集,电量指示灯 } } } INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23) { /* In order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction. */ if(Global_Timing_Counter == 0x9A7EC800) //30days { Global_Timing_Counter = 0U; } else { Global_Timing_Counter++; } PeriodCnt_5ms++; PeriodCnt_20ms++; PeriodCnt_100ms++; Tim4_Isr_CallBack(); TIM4_ClearITPendingBit(TIM4_IT_UPDATE); } INTERRUPT_HANDLER(ADC1_IRQHandler, 22) { /* In order to detect unexpected events during development, it is recommended to set a breakpoint on the following instruction. */ ADC1->CSR &= ~0x80; // 转换结束标志位清零 EOC //默认左对齐 读数据时先读高高8位 再读低8位 AD_Value = (ADC1->DRH << 2); AD_Value += ADC1->DRL; AD_FinishFlag = 1; // ADC中断标志 置1 } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval : None */ void assert_failed(u8* file, u32 line) { /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* Infinite loop */ while (1) { } } #endif /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/