| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857 |
- /*--------------------------------------------------------------------------------------
- * @file Driver.c
- * @author ZhangJing
- * @version base on stm32f0x
- * @date 2015.09.11
- * @brief 硬件驱动
- ---------------------------------------------------------------------------------------*/
- #include "stm32f10x_rcc.h"
- #include "stm32f10x_gpio.h"
- #include "stm32f10x.h"
- #include "stm32f10x_exti.h"
- #include "stm32f10x_dma.h"
- #include "stm32f10x_adc.h"
- #include "stm32f10x_tim.h"
- #include "stm32f10x_pwr.h"
- #include "stm32f10x_rtc.h"
- #include "stm32f10x_bkp.h"
- #include "TypeDefine.h"
- #include "TimerSetup.h"
- #include "IICSetup.h"
- #include "IIC2Setup.h"
- #include "ADS1110Setup.h"
- #include "ADS1110ASetup.h"
- #include "ADCSetup.h"
- #include "SPISetup.h"
- #include "USARTSetup.h"
- #include "RTCSetup.h"
- #include "HostSlaveHandle.h"
- #include "Driver.h"
- #include "lorawan.h"
- #include <stdio.h>
- #include "Bubble_ADCSetup.h"
- #include "delay.h"
- #include "ControlSystem.h"
- extern uint8_t Recive_lorawanID_flag; //接收LORAWAN ID号
- uint8_t mcu_id[8]; //mcu ID号缓冲区
- extern uint16_t random_cont; //随机数种子值
- /*************************************************************************************
- * Function: DriverSpeakerInit
- * Object: Configures SPEAKER GPIO.
- * 输入: 无
- * 输出: 无
- * 备注: PB14
- **************************************************************************************/
- void DriverSpeakerInit( void )
- {
- /*定义一个GPIO_InitTypeDef类型的结构体*/
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable the GPIO_SPEAKER Clock */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
-
- /*选择要控制的GPIOC引脚*/
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
- /*设置引脚模式为通用推挽输出*/
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- /*设置引脚速率为50MHz */
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- /*调用库函数,初始化GPIOB*/
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- /* 关闭锋鸣器 */
- // GPIO_ResetBits(GPIOB,GPIO_Pin_14);
- }
- /*************************************************************************************
- * Function: DriverLCDPWRInit
- * Object: Configures LCD Power GPIO.
- * 输入: 无
- * 输出: 无
- * 备注: PB6
- **************************************************************************************/
- void DriverLCDPWRInit( void )
- {
- /*定义一个GPIO_InitTypeDef类型的结构体*/
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable the GPIO_SPEAKER Clock */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
-
- /*选择要控制的GPIOC引脚*/
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
- /*设置引脚模式为通用推挽输出*/
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- /*设置引脚速率为50MHz */
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- /*调用库函数,初始化GPIOB*/
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- /* 主机关闭LCD电源 */
- GPIO_SetBits(GPIOB,GPIO_Pin_6);
-
- /* Enable the GPIO_SPEAKER Clock */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
-
- /*选择要控制的GPIOC引脚*/
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
- /*设置引脚模式为通用推挽输出*/
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- /*设置引脚速率为50MHz */
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- /*调用库函数,初始化GPIOB*/
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- /* 主机关闭LCD电源 */
- // GPIO_SetBits(GPIOA,GPIO_Pin_11);
- }
- /*************************************************************************************
- * Function: DriverZigbeePWRInit
- * Object: Configures Zigbee PWR GPIO.
- * 输入: 无
- * 输出: 无
- * 备注: PB12
- **************************************************************************************/
- void DriverZigbeePWRInit( void )
- {
- /*定义一个GPIO_InitTypeDef类型的结构体*/
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable the GPIO_SPEAKER Clock */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
-
- /*选择要控制的GPIOC引脚*/
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
- /*设置引脚模式为通用推挽输出*/
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- /*设置引脚速率为50MHz */
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- /*调用库函数,初始化GPIOB*/
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- /* 主机关闭zigbee电源 */
- //GPIO_SetBits(GPIOB,GPIO_Pin_12);
- //开电源
- GPIO_ResetBits(GPIOB,GPIO_Pin_12);
-
- /* 将控制zigbee板的电源引脚设置为悬空 */
- /* GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOC, &GPIO_InitStructure);*/
- // /* Enable the GPIO_SPEAKER Clock */
- // RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- //
- // /*选择要控制的GPIOC引脚*/
- // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
- // /*设置引脚模式为通用推挽输出*/
- // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- // /*调用库函数,初始化GPIOB*/
- // GPIO_Init(GPIOA, &GPIO_InitStructure);
- }
- /*************************************************************************************
- * Function: DriverKeyInit
- * Object: Configures KEY GPIO.
- * 初始化按键,包括中断
- * 输入: 无
- * 输出: 无
- * 备注: PE8 PE9 PE10 PE11 PE12 PE13 PE14 PE15
- EXTI9_5_IRQn、EXTI15_10_IRQn要分开初始化
- **************************************************************************************/
- void DriverKeyInit( void )
- {
- /*定义一个GPIO_InitTypeDef类型的结构体*/
- GPIO_InitTypeDef GPIO_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /* Enable the GPIO_KEY Clock */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);
-
- /* Configyre P[A|B|C|D|E]0 NIVC */
- NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- /* Configyre P[A|B|C|D|E]0 NIVC */
- NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- /* 选择要控制的GPIOE引脚,IO配置 PE8/PE9/PE10/PE11/PE12/PE13/PE14/PE15 下拉输入 */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11
- | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(GPIOE, &GPIO_InitStructure);
-
- /* 选择要控制的GPIOB引脚,IO配置 PB15 下拉输入 */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- /*外部中断模式设置 EXTI line(PB15) mode config */
- // GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource15);
- // EXTI_InitStructure.EXTI_Line = EXTI_Line15;
- // EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- // EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
- // EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- // EXTI_Init(&EXTI_InitStructure);
-
- /*外部中断模式设置 EXTI line(PE8) mode config */
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource8);
- EXTI_InitStructure.EXTI_Line = EXTI_Line8;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
- /*外部中断模式设置 EXTI line(PE9) mode config */
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource9);
- EXTI_InitStructure.EXTI_Line = EXTI_Line9;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
- /*外部中断模式设置 EXTI line(PE10) mode config */
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource10);
- EXTI_InitStructure.EXTI_Line = EXTI_Line10;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
- /*外部中断模式设置 EXTI line(PE11) mode config */
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource11);
- EXTI_InitStructure.EXTI_Line = EXTI_Line11;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
- /*外部中断模式设置 EXTI line(PE12) mode config */
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource12);
- EXTI_InitStructure.EXTI_Line = EXTI_Line12;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
- /*外部中断模式设置 EXTI line(PE13) mode config */
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource13);
- EXTI_InitStructure.EXTI_Line = EXTI_Line13;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
- /*外部中断模式设置 EXTI line(PE14) mode config */
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource14);
- EXTI_InitStructure.EXTI_Line = EXTI_Line14;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
-
- /*外部中断模式设置 EXTI line(PE15) mode config */
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource15);
- EXTI_InitStructure.EXTI_Line = EXTI_Line15;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
- }
- /*************************************************************************************
- * Function: PowerKeySave
- * Object: Configures POWER GPIO Save Mode.
- * 仅配置了电源控制引脚完全关闭
- * 输入: 无
- * 输出: 无
- * 备注: PE15
- **************************************************************************************/
- void PowerKeySave( void )
- {
- /*定义一个GPIO_InitTypeDef类型的结构体*/
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* 选择要控制的GPIOA引脚,IO配置 PE9/PE10/PE11/PE12/PE13/PE14/PE8 下拉输入 */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOE, &GPIO_InitStructure);
- }
- /*************************************************************************************
- * Function: DriverMotorInit
- * Object: Configures MOTOR GPIO.
- * 仅配置了电机控制引脚
- * 输入: 无
- * 输出: 无
- * 备注: PB13
- **************************************************************************************/
- void DriverMotorInit( void )
- {
- /*定义一个GPIO_InitTypeDef类型的结构体*/
- GPIO_InitTypeDef GPIO_InitStructure;
-
- //GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE);
- /* 启动GPIO */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
- /* 启动AFIO */
- //RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
- /* 启动TIM1 */
- //RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
-
- /* PB.13口设置为TIM1_CH1N */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
- /*设置引脚模式为通用推挽输出*/
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO_Mode_AF_PP;
- /*设置引脚速率为50MHz */
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- /*调用库函数,初始化GPIOB*/
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- /* 关闭电机 */
- // GPIO_SetBits(GPIOB,GPIO_Pin_13);
- }
- /*************************************************************************************
- * Function: DriverHallInit
- * Object: Configures Hall GPIO.
- * 输入: 无
- * 输出: 无
- * 备注: PA1/PA6
- **************************************************************************************/
- void DriverHallInit( void )
- {
- /*定义一个GPIO_InitTypeDef类型的结构体*/
- GPIO_InitTypeDef GPIO_InitStructure;
- EXTI_InitTypeDef EXTI_InitStructure;
- NVIC_InitTypeDef NVIC_InitStructure;
-
- /* Enable the GPIO_KEY Clock */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);
-
- /* Configyre P[A|B|C|D|E]0 NIVC */
- /*NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure); */
-
- /* Configyre P[A|B|C|D|E]0 NIVC */
- NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
- NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//1
- NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;// 1
- NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- NVIC_Init(&NVIC_InitStructure);
-
- /* 选择要控制的GPIOE引脚,IO配置 PA1/PA6 上拉输入 */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//GPIO_Mode_IPD
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO_Mode_Out_PP
- GPIO_Init(GPIOA, &GPIO_InitStructure);
-
- /*外部中断模式设置 EXTI line(PA1) mode config */
- /*GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource1);
- EXTI_InitStructure.EXTI_Line = EXTI_Line1;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure); */
-
- /*外部中断模式设置 EXTI line(PA6) mode config */
- GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource6);
- EXTI_InitStructure.EXTI_Line = EXTI_Line6;
- EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
- EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
- EXTI_InitStructure.EXTI_LineCmd = ENABLE;
- EXTI_Init(&EXTI_InitStructure);
- }
- /*************************************************************************************
- * Function: DriverSavePinInit
- * Object: 配置除电源控制键外所有用的引脚全部不可用,用来做节能模式
- * 输入: 无
- * 输出: 无
- * 备注: PE15电源键 PE9/10/11/12/13/14/15
- **************************************************************************************/
- void DriverSavePinInit( void )
- {
- // /*定义一个GPIO_InitTypeDef类型的结构体*/
- // GPIO_InitTypeDef GPIO_InitStructure;
- // /* 选择要控制的GPIOA引脚,IO配置成低功耗模式 */
- // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3
- // | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7
- // | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11
- // | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 ;
- // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
- // GPIO_Init(GPIOA, &GPIO_InitStructure);
- //
- // /* 选择要控制的GPIOB引脚,IO配置成低功耗模式 */
- // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3
- // | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7
- // | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11
- // | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 ;
- // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
- // GPIO_Init(GPIOB, &GPIO_InitStructure);
- //
- // /* 选择要控制的GPIOC引脚,IO配置成低功耗模式 */
- // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3
- // | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7
- // | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11
- // | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 ;
- // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
- // GPIO_Init(GPIOC, &GPIO_InitStructure);
- //
- // /* 选择要控制的GPIOD引脚,IO配置成低功耗模式 */
- // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3
- // | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7
- // | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11
- // | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 ;
- // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
- // GPIO_Init(GPIOD, &GPIO_InitStructure);
- //
- // /* 选择要控制的GPIOE引脚,IO配置成低功耗模式 */
- // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3
- // | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7
- // | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11
- // | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15 ;
- // GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
- // GPIO_Init(GPIOE, &GPIO_InitStructure);
- }
- /*********************************************************************************
- * Function: SpeakerCtl
- * Object: 蜂鸣器控制
- * 输入: 蜂鸣器控制状态
- * 输出: 无
- * 备注: uint8_t driverState:DRIVER_ON蜂鸣器打开,DRIVER_OFF蜂鸣器关闭
- **********************************************************************************/
- void SpeakerCtl( uint8_t driverState )
- {
- if( driverState == DRIVER_ON )
- {
- GPIO_SetBits(GPIOB,GPIO_Pin_14);
- }
- else
- {
- GPIO_ResetBits(GPIOB,GPIO_Pin_14);
- }
- }
- /*********************************************************************************
- * Function: SensorPWRCtl
- * Object: Sensor电源控制
- * 输入: Sensor控制状态
- * 输出: 无
- * 备注: uint8_t driverState:DRIVER_ON传感器电源打开;DRIVER_OFF传感器电源关闭
- **********************************************************************************/
- void SensorPWRCtl( uint8_t driverState )
- {
- if( driverState == DRIVER_ON )
- {
- GPIO_ResetBits(GPIOB,GPIO_Pin_6); //打开红外检测传感器电源
- GPIO_SetBits(GPIOA,GPIO_Pin_1); //使能红外检测传感器
- }
- else
- {
- GPIO_SetBits(GPIOB,GPIO_Pin_6);
- GPIO_ResetBits(GPIOA,GPIO_Pin_1);
- }
- }
- /********************************************************************************************************
- * Function: Power_GPIOInit
- * Object: 单片机引动初始化
- * 输入: 无
- * 输出: 无
- * 备注: PA8电机电路电源芯片使能脚
- PD5主控电源控制管脚
- ********************************************************************************************************/
- void Power_GPIOInit(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
-
- /* Enable the GPIOA/GPIOB Clock */
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
-
- /* Configure the GPIO_MainPOWER pin */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
- /* 打开总电源(MCU 电源) */
- GPIO_ResetBits(GPIOD,GPIO_Pin_5);
- /* Configure the GPIO_ENMotorPower pin */
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- /* 使能电源芯片 TPS73633DBVT */
- GPIO_SetBits(GPIOA,GPIO_Pin_8);
- }
- /********************************************************************************************************
- * Function: Power_GPIOInit
- * Object: LED指示灯初始化
- * 输入: 无
- * 输出: 无
- * 备注: PB1 GREEN LED
- PB8 RED LED
- PB9 YELLOW LED
- ********************************************************************************************************/
- void LedInit(void)
- {
- /*定义一个GPIO_InitTypeDef类型的结构体*/
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
- GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_1 | GPIO_Pin_8 | GPIO_Pin_9) ;
- /*设置引脚模式为通用推挽输出*/
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO_Mode_AF_PP;
- /*设置引脚速率为50MHz */
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- /*调用库函数,初始化GPIOB*/
- GPIO_Init(GPIOB, &GPIO_InitStructure);
-
- GPIO_ResetBits(GPIOB,GPIO_Pin_9|GPIO_Pin_1);
-
- }
- /********************************************************************************************************
- * Function: WatchDogInit
- * Object: 看门狗初始化
- * 输入: 无
- * 输出: 无
- * 备注: PC0 WDI
- PC1 WDT-EN
- ********************************************************************************************************/
- void WatchDogInit(void)
- {
- /*定义一个GPIO_InitTypeDef类型的结构体*/
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
- GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1) ;
- /*设置引脚模式为通用推挽输出*/
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO_Mode_AF_PP;
- /*设置引脚速率为50MHz */
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- /*调用库函数,初始化GPIOB*/
- GPIO_Init(GPIOC, &GPIO_InitStructure);
-
- // GPIO_ResetBits(GPIOC,GPIO_Pin_1); //开启看门狗
- }
- /*********************************************************************************
- * Function: LCDBLACtl
- * Object: LCD背光控制
- * 输入: LCD背光控制状态
- * 输出: 无
- * 备注: uint8_t driverState:DRIVER_ON背光电源打开;DRIVER_OFF背光电源关闭
- **********************************************************************************/
- void LCDBLACtl( uint8_t driverState )
- {
- if( driverState == DRIVER_ON )
- {
- GPIO_SetBits(GPIOA,GPIO_Pin_11);
- }
- else
- {
- GPIO_ResetBits(GPIOA,GPIO_Pin_11);
- }
- }
- /*********************************************************************************
- * Function: ZigbeePWRCtl
- * Object: zigbee电源控制
- * 输入: zigbee电源控制状态
- * 输出: 无
- * 备注: uint8_t driverState:DRIVER_ON zigbee电源打开,DRIVER_OFF zigbee电源关闭
- **********************************************************************************/
- void ZigbeePWRCtl( uint8_t driverState )
- {
- /*定义一个GPIO_InitTypeDef类型的结构体*/
- // GPIO_InitTypeDef GPIO_InitStructure;
- if( driverState == DRIVER_ON )
- {
- /* 重新初始化一下通信口 */
- // USART2_Init( 9600 );
- GPIO_ResetBits(GPIOB,GPIO_Pin_12);
- }
- /* else
- {
- GPIO_SetBits(GPIOB,GPIO_Pin_12);
- // 将zigbee通信口设置为低功耗模式
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- }*/
- }
- /*********************************************************************************
- * Function: MotorPWRCtl
- * Object: Motor电源控制
- * 输入: Motor电源控制状态
- * 输出: 无
- * 备注: uint8_t driverState: DRIVER_ON电机电源打开,DRIVER_OFF电机电源关闭
- **********************************************************************************/
- void MotorPWRCtl( uint8_t driverState )
- {
- if( driverState == DRIVER_ON )
- {
- GPIO_ResetBits(GPIOB,GPIO_Pin_13);
- }
- else
- {
- GPIO_SetBits(GPIOB,GPIO_Pin_13);
- }
- }
- /*********************************************************************************
- * Function: SpeakerInit
- * Object: 功放管脚初始化
- * 输入: 五
- * 输出: 无
- * 备注: data PC10.BUSY PC9
- **********************************************************************************/
- void SpeakerInit(void)
- {
- /*定义一个GPIO_InitTypeDef类型的结构体*/
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_15 ) ;
- /*设置引脚模式为通用推挽输出*/
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//GPIO_Mode_AF_PP;
-
- GPIO_InitStructure.GPIO_Pin = ( GPIO_Pin_12) ;
- /*设置引脚模式为通用推挽输出*/
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//GPIO_Mode_AF_PP;
- /*设置引脚速率为50MHz */
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- /*调用库函数,初始化GPIOB*/
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- GPIO_SetBits(GPIOA, GPIO_Pin_12);
- Delay_ms(120);
- HornWorkStatus(HornMaxSound);//初始化最大音量
- Delay_ms(5);
- }
- /*********************************************************************************
- * Function: SpeakerResetInit
- * Object: 功放管脚复位
- * 输入: 五
- * 输出: 无
- * 备注: data PC10.BUSY PC9 设置成浮空输入
- **********************************************************************************/
- void SpeakerResetInit(void)
- {
- /*定义一个GPIO_InitTypeDef类型的结构体*/
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_15) ;
- /*设置引脚模式为浮空输入*/
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
-
- GPIO_InitStructure.GPIO_Pin = ( GPIO_Pin_12) ;
- /*设置引脚模式为浮空输入*/
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- /*调用库函数,初始化GPIOB*/
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- }
- /*************************************************************************************
- * Function: CntAlarmSpeaker
- * Object: 控制喇叭工作
- * 输入: uint16_t pwmSetValue
- * 输出: 无
- * 备注: pwmSetValue 0:停止工作 其它值:开启电机
- **************************************************************************************/
- void CntAlarmSpeaker(uint8_t AlarmData)
- {
- uint8_t S_DATA,j;
- uint8_t B_DATA;
- S_DATA = AlarmData;
- SpeakerDataGPIOLow;
- Delay_ms(5); //延时 5ms
- B_DATA = S_DATA&0X01;
- for(j=0;j<8;j++)
- {
- if(B_DATA == 1)
- {
- SpeakerDataGPIOHight;
- delay_us(6); //延时 600us
- SpeakerDataGPIOLow;
- delay_us(2); //延时 200us
- }
- else
- {
- SpeakerDataGPIOHight;
- delay_us(2); //延时 200us
- SpeakerDataGPIOLow;
- delay_us(6); //延时 600us
- }
- S_DATA = S_DATA>>1;
- B_DATA = S_DATA&0X01;
- }
- SpeakerDataGPIOHight;
- }
- /*************************************************************************************
- * Function: CntOpenHornInit
- * Object: 控制打开喇叭管脚初始化
- * 输入:
- * 输出: 无
- * 备注:
- **************************************************************************************/
- void CntOpenHornInit()
- {
- if((SysHornToneType != SoundWate)&&(TaskSchedulerFlag.AlarmInitFlag == TASK_FLAG_CLEAR))
- {
- // TIM3_Int_Init(100-1,800-1);
- SpeakerInit();//喇叭初始化
- TaskSchedulerFlag.AlarmInitFlag = TASK_FLAG_SET;//报警管脚初始化完成标志
- }
- else if((SysHornToneType == SoundWate)&&(TaskSchedulerFlag.AlarmInitFlag == TASK_FLAG_SET))
- {
- TaskSchedulerFlag.AlarmInitFlag = TASK_FLAG_CLEAR;
- SpeakerResetInit();//喇叭管脚复位
- }
- }
- /*********************************************************************************
- * Function: MCU_ID
- * Object: ID读取
- * 输入: 无
- * 输出: 无
- * 备注: 96位ID,12个字节,低6位求和整理为2个字节
- **********************************************************************************/
- void MCU_ID( void )
- {
- u32 mcuID[3];
- u32 check_id=0;
-
- //--------------读取mcu ID号------------------
- mcuID[0] = *(__IO u32*)(0x1FFFF7E8);
- mcuID[1] = *(__IO u32*)(0X1FFFF7EC);
- mcuID[2] = *(__IO u32*)(0x1FFFF7F0);
-
- check_id = (uint32_t)((uint8_t)mcuID[0]+(uint8_t)(mcuID[0]>>8)+(uint8_t)(mcuID[0]>>16)+(uint8_t)(mcuID[0]>>24)+(uint8_t)mcuID[1]+(uint8_t)(mcuID[1]>>8));
-
- mcu_id[7] = (uint8_t)check_id;
- mcu_id[6] = (uint8_t)(check_id>>8); //低位
- mcu_id[5] = (uint8_t)(mcuID[1]>>16);
- mcu_id[4] = (uint8_t)(mcuID[1]>>24);
-
- mcu_id[3] = (uint8_t)mcuID[2];
- mcu_id[2] = (uint8_t)(mcuID[2]>>8);
- mcu_id[1] = (uint8_t)(mcuID[2]>>16);
- mcu_id[0] = (uint8_t)(mcuID[2]>>24); //高位
-
- random_cont=(uint16_t)(mcuID[0]+mcuID[1]+mcuID[2]);
-
- Recive_lorawanID_flag=1;
- /* printf("%x\r\n",mcuID[0]);
- printf("%x\r\n",mcuID[1]);
- printf("%x\r\n",mcuID[2]);*/
- }
- /*********************************************************************************
- * Function: HWSetup
- * Object: 硬件初始化
- * 输入: 无
- * 输出: 无
- * 备注: SystemCoreClock:((uint32_t)8000000) !< Value of the External oscillator in Hz
- **********************************************************************************/
- void HWSetup( void )
- {
- SystemInit();
- /* Setup SysTick Timer for 1 msec interrupts */
- SysTick_Config(SystemCoreClock / 1000);
- DriverMotorInit();
-
- DriverHallInit();
-
- DriverSpeakerInit();
- DriverLCDPWRInit();
- DriverZigbeePWRInit();
- DriverKeyInit();
- LedInit();
-
- Power_GPIOInit();
-
- USART1_Init(115200);
- USART2_Init(115200); // update by wulianwei
- //USART3_Init(9600);
- SPIInit();
-
- IICInit();
- //IIC2Init();
- ADS1110Config();
- //ADS1110AConfig();
- //LoraNode_GPIO_Init(); //comment by wulianwei
- //--------------------------- OPEN DMA CLK -------------------------
- //开DMA时钟 用于ADC模式
- //DriverADCInit();
- OPB350L_ADCInit();//红外检测气泡传感器初始化
- //板端电源设置-关闭
- MotorPWRCtl( DRIVER_OFF );
- SpeakerCtl( DRIVER_OFF );//蜂鸣器
- TIM3_Int_Init(100-1,800-1);
- // SpeakerInit();//喇叭初始化
- SensorPWRCtl( DRIVER_ON );//Sensor电源
- LCDBLACtl( DRIVER_OFF );//LCD背光
- // ZigbeePWRCtl( DRIVER_ON );//zigbee电源
- MCU_ID();//读取mcu的ID号
- WatchDogInit();//看门狗IO口初始化*/
- }
|