From a760912c22c9d85892313ae994ca9634dbe5f85d Mon Sep 17 00:00:00 2001 From: guanjiao <sqrgj@163.com> Date: 星期一, 14 五月 2018 23:25:02 +0800 Subject: [PATCH] 分开各部分驱动 --- 源码/核心板/Src/OnChipDevices/Rcc_Nvic_Systick.h | 11 源码/核心板/MDK-ARM/Project.uvprojx | 214 +++++++++++++++++ 源码/核心板/Src/ExternalDevices/led.h | 15 + 源码/核心板/Src/stm32f10x_it.c | 6 源码/核心板/Src/OnChipDevices/Rcc_Nvic_Systick.c | 72 ++++++ 源码/核心板/Src/OnChipDevices/Spi.h | 25 ++ 源码/核心板/Src/main.c | 35 ++ 源码/核心板/Src/ExternalDevices/dw_driver.c | 56 ++++ 源码/核心板/Src/OnChipDevices/Spi.c | 73 ++++++ 源码/核心板/MDK-ARM/Project.uvoptx | 76 ++++++ 源码/核心板/Src/ExternalDevices/dw_driver.h | 21 + 源码/核心板/Src/OnChipDevices/Usart.c | 46 +++ 源码/核心板/Src/ExternalDevices/led.c | 21 + 源码/核心板/Src/OnChipDevices/Usart.h | 18 + 14 files changed, 675 insertions(+), 14 deletions(-) diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvoptx" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvoptx" index 058de8d..9d74f2c 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvoptx" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvoptx" @@ -1694,4 +1694,80 @@ </File> </Group> + <Group> + <GroupName>OnChipDevices</GroupName> + <tvExp>1</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>0</RteFlg> + <File> + <GroupNumber>6</GroupNumber> + <FileNumber>37</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\Src\OnChipDevices\Usart.c</PathWithFileName> + <FilenameWithoutPath>Usart.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>6</GroupNumber> + <FileNumber>38</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\Src\OnChipDevices\Spi.c</PathWithFileName> + <FilenameWithoutPath>Spi.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>6</GroupNumber> + <FileNumber>39</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\Src\OnChipDevices\Rcc_Nvic_Systick.c</PathWithFileName> + <FilenameWithoutPath>Rcc_Nvic_Systick.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + </Group> + + <Group> + <GroupName>ExternalDevices</GroupName> + <tvExp>1</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <cbSel>0</cbSel> + <RteFlg>0</RteFlg> + <File> + <GroupNumber>7</GroupNumber> + <FileNumber>40</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\Src\ExternalDevices\dw_driver.c</PathWithFileName> + <FilenameWithoutPath>dw_driver.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + <File> + <GroupNumber>7</GroupNumber> + <FileNumber>41</FileNumber> + <FileType>1</FileType> + <tvExp>0</tvExp> + <tvExpOptDlg>0</tvExpOptDlg> + <bDave2>0</bDave2> + <PathWithFileName>..\Src\ExternalDevices\led.c</PathWithFileName> + <FilenameWithoutPath>led.c</FilenameWithoutPath> + <RteFlg>0</RteFlg> + <bShared>0</bShared> + </File> + </Group> + </ProjectOpt> diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvprojx" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvprojx" index 395a9fa..b4aeddd 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvprojx" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/MDK-ARM/Project.uvprojx" @@ -580,6 +580,41 @@ </File> </Files> </Group> + <Group> + <GroupName>OnChipDevices</GroupName> + <Files> + <File> + <FileName>Usart.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Usart.c</FilePath> + </File> + <File> + <FileName>Spi.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Spi.c</FilePath> + </File> + <File> + <FileName>Rcc_Nvic_Systick.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Rcc_Nvic_Systick.c</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>ExternalDevices</GroupName> + <Files> + <File> + <FileName>dw_driver.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\ExternalDevices\dw_driver.c</FilePath> + </File> + <File> + <FileName>led.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\ExternalDevices\led.c</FilePath> + </File> + </Files> + </Group> </Groups> </Target> <Target> @@ -1153,6 +1188,41 @@ <FileName>deca_mutex.c</FileName> <FileType>1</FileType> <FilePath>..\Src\platform\deca_mutex.c</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>OnChipDevices</GroupName> + <Files> + <File> + <FileName>Usart.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Usart.c</FilePath> + </File> + <File> + <FileName>Spi.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Spi.c</FilePath> + </File> + <File> + <FileName>Rcc_Nvic_Systick.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Rcc_Nvic_Systick.c</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>ExternalDevices</GroupName> + <Files> + <File> + <FileName>dw_driver.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\ExternalDevices\dw_driver.c</FilePath> + </File> + <File> + <FileName>led.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\ExternalDevices\led.c</FilePath> </File> </Files> </Group> @@ -1732,6 +1802,41 @@ </File> </Files> </Group> + <Group> + <GroupName>OnChipDevices</GroupName> + <Files> + <File> + <FileName>Usart.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Usart.c</FilePath> + </File> + <File> + <FileName>Spi.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Spi.c</FilePath> + </File> + <File> + <FileName>Rcc_Nvic_Systick.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Rcc_Nvic_Systick.c</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>ExternalDevices</GroupName> + <Files> + <File> + <FileName>dw_driver.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\ExternalDevices\dw_driver.c</FilePath> + </File> + <File> + <FileName>led.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\ExternalDevices\led.c</FilePath> + </File> + </Files> + </Group> </Groups> </Target> <Target> @@ -2305,6 +2410,41 @@ <FileName>deca_mutex.c</FileName> <FileType>1</FileType> <FilePath>..\Src\platform\deca_mutex.c</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>OnChipDevices</GroupName> + <Files> + <File> + <FileName>Usart.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Usart.c</FilePath> + </File> + <File> + <FileName>Spi.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Spi.c</FilePath> + </File> + <File> + <FileName>Rcc_Nvic_Systick.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Rcc_Nvic_Systick.c</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>ExternalDevices</GroupName> + <Files> + <File> + <FileName>dw_driver.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\ExternalDevices\dw_driver.c</FilePath> + </File> + <File> + <FileName>led.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\ExternalDevices\led.c</FilePath> </File> </Files> </Group> @@ -2884,6 +3024,41 @@ </File> </Files> </Group> + <Group> + <GroupName>OnChipDevices</GroupName> + <Files> + <File> + <FileName>Usart.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Usart.c</FilePath> + </File> + <File> + <FileName>Spi.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Spi.c</FilePath> + </File> + <File> + <FileName>Rcc_Nvic_Systick.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Rcc_Nvic_Systick.c</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>ExternalDevices</GroupName> + <Files> + <File> + <FileName>dw_driver.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\ExternalDevices\dw_driver.c</FilePath> + </File> + <File> + <FileName>led.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\ExternalDevices\led.c</FilePath> + </File> + </Files> + </Group> </Groups> </Target> <Target> @@ -2931,7 +3106,7 @@ <OutputName>UWB_Projects</OutputName> <CreateExecutable>1</CreateExecutable> <CreateLib>0</CreateLib> - <CreateHexFile>1</CreateHexFile> + <CreateHexFile>0</CreateHexFile> <DebugInformation>1</DebugInformation> <BrowseInformation>1</BrowseInformation> <ListingPath>.\Listings\</ListingPath> @@ -3215,7 +3390,7 @@ <MiscControls></MiscControls> <Define>USE_STDPERIPH_DRIVER, STM32F10X_MD</Define> <Undefine></Undefine> - <IncludePath>..\Src\Libraries\CMSIS\CM3\CoreSupport;..\Src\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x;..\Src\Libraries\STM32F10x_StdPeriph_Driver\inc;..\Src\decadriver;..\Src\platform</IncludePath> + <IncludePath>..\Src\Libraries\CMSIS\CM3\CoreSupport;..\Src\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x;..\Src\Libraries\STM32F10x_StdPeriph_Driver\inc;..\Src\decadriver;..\Src\platform;..\Src;..\Src\OnChipDevices;..\Src\ExternalDevices</IncludePath> </VariousControls> </Cads> <Aads> @@ -3461,6 +3636,41 @@ </File> </Files> </Group> + <Group> + <GroupName>OnChipDevices</GroupName> + <Files> + <File> + <FileName>Usart.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Usart.c</FilePath> + </File> + <File> + <FileName>Spi.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Spi.c</FilePath> + </File> + <File> + <FileName>Rcc_Nvic_Systick.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\OnChipDevices\Rcc_Nvic_Systick.c</FilePath> + </File> + </Files> + </Group> + <Group> + <GroupName>ExternalDevices</GroupName> + <Files> + <File> + <FileName>dw_driver.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\ExternalDevices\dw_driver.c</FilePath> + </File> + <File> + <FileName>led.c</FileName> + <FileType>1</FileType> + <FilePath>..\Src\ExternalDevices\led.c</FilePath> + </File> + </Files> + </Group> </Groups> </Target> </Targets> diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/dw_driver.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/dw_driver.c" new file mode 100644 index 0000000..62b7c23 --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/dw_driver.c" @@ -0,0 +1,56 @@ +#include "dw_driver.h" +#include "deca_sleep.h" + +void Reset_DW1000(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + // Enable GPIO used for DW1000 reset + GPIO_InitStructure.GPIO_Pin = DW1000_RSTn; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(DW1000_RSTn_GPIO, &GPIO_InitStructure); + + //drive the RSTn pin low + GPIO_ResetBits(DW1000_RSTn_GPIO, DW1000_RSTn); + + //put the pin back to tri-state ... as input + GPIO_InitStructure.GPIO_Pin = DW1000_RSTn; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(DW1000_RSTn_GPIO, &GPIO_InitStructure); + + deca_sleep(2); +} + +void DW_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + EXTI_InitTypeDef EXTI_InitStructure; + + /* Enable GPIO clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); + + // Enable GPIO used for DW1000 wakeup + GPIO_InitStructure.GPIO_Pin = DW1000_WAKEUP; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(DW1000_WAKEUP_GPIO, &GPIO_InitStructure); + + // Enable GPIO used for DW1000 IRQ + GPIO_InitStructure.GPIO_Pin = DW1000_IRQ; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //IRQ pin should be Pull Down to prevent unnecessary EXT IRQ while DW1000 goes to sleep mode + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(DW1000_IRQ_GPIO, &GPIO_InitStructure); + + // Connect EXTI Line to GPIO Pin + GPIO_EXTILineConfig(DECAIRQ_EXTI_PORT, DECAIRQ_EXTI_PIN); + + // Configure EXTI line + EXTI_InitStructure.EXTI_Line = DECAIRQ_EXTI; + EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; + EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; //MPW3 IRQ polarity is high by default + EXTI_InitStructure.EXTI_LineCmd = DISABLE; + EXTI_Init(&EXTI_InitStructure); + +} diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/dw_driver.h" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/dw_driver.h" new file mode 100644 index 0000000..89bc1bd --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/dw_driver.h" @@ -0,0 +1,21 @@ + +#ifndef __DW_DRIVER_H__ +#define __DW_DRIVER_H__ + +#include "stm32f10x.h" + + +#define DW1000_RSTn GPIO_Pin_1 +#define DW1000_RSTn_GPIO GPIOA +#define DW1000_WAKEUP GPIO_Pin_3 +#define DW1000_WAKEUP_GPIO GPIOA +#define DW1000_IRQ GPIO_Pin_2 +#define DW1000_IRQ_GPIO GPIOA +#define DECAIRQ_EXTI EXTI_Line2 +#define DECAIRQ_EXTI_PORT GPIO_PortSourceGPIOA +#define DECAIRQ_EXTI_PIN GPIO_PinSource2 + + +void Reset_DW1000(void); + +#endif diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/led.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/led.c" new file mode 100644 index 0000000..9a194da --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/led.c" @@ -0,0 +1,21 @@ +#include "led.h" + +void Led_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + /* Enable GPIO clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); + + // Enable GPIO used for DW1000 wakeup + GPIO_InitStructure.GPIO_Pin = LED0_PIN; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(LED0_GPIO, &GPIO_InitStructure); +} + +void GPIO_Toggle(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin) +{ + GPIO_WriteBit(GPIOx, GPIO_Pin, (BitAction)!GPIO_ReadOutputDataBit(GPIOx, GPIO_Pin)); +} + diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/led.h" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/led.h" new file mode 100644 index 0000000..ccf5a55 --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/ExternalDevices/led.h" @@ -0,0 +1,15 @@ + +#ifndef __LED_H__ +#define __LED_H__ + +#include "stm32f10x.h" + +#define LED0_PIN GPIO_Pin_8 +#define LED0_GPIO GPIOA +#define LED_BLINK(...) GPIO_Toggle(...) +#define LED0_BLINK LED_BLINK(LED0_GPIO, LED0_PIN) + + +void Led_Init(void); + +#endif diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Rcc_Nvic_Systick.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Rcc_Nvic_Systick.c" new file mode 100644 index 0000000..cd517b6 --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Rcc_Nvic_Systick.c" @@ -0,0 +1,72 @@ +#include "Rcc_Nvic_Systick.h" + +void Rcc_Init(void) +{ + //----------使用内部RC晶振HSI 64MHz----------- + RCC_DeInit(); //将外设RCC寄存器重设为缺省值 + RCC_HSICmd(ENABLE); //内部时钟使能 + while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY)== RESET); //等待HSI就绪 + + FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //选择FLASH预取指缓存的模,预取指缓存使能 + FLASH_SetLatency(FLASH_Latency_2); //设置FLASH存储器延时时钟周期数FLASH_Latency_2 2延时周期 + + + RCC_HCLKConfig(RCC_SYSCLK_Div1); //设置AHB时钟(HCLK) RCC_SYSCLK_Div1——AHB时钟 = 系统时钟 + RCC_PCLK2Config(RCC_HCLK_Div1); //设置高速AHB时钟(PCLK2)RCC_HCLK_Div1——APB2时钟 = HCLK + RCC_PCLK1Config(RCC_HCLK_Div2); //设置低速AHB时钟(PCLK1)RCC_HCLK_Div2——APB1时钟 = HCLK/2 + RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_16); //设置PLL时钟源及倍频系数,频率为8/2*16=64Mhz + RCC_PLLCmd(ENABLE); //使能PLL + + while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //检查指定的RCC标志位(PLL准备好标志)设置与否 + RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //设置系统时钟(SYSCLK) + while(RCC_GetSYSCLKSource() != 0x08); //0x08:PLL作为系统时钟 + +// //----------使用外部RC晶振 72MHz----------- +// RCC_DeInit(); //初始化为缺省值 +// RCC_HSEConfig(RCC_HSE_ON); //使能外部的高速时钟 +// while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); //等待外部高速时钟使能就绪 +// +// FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); //Enable Prefetch Buffer +// FLASH_SetLatency(FLASH_Latency_2); //Flash 2 wait state +// +// RCC_HCLKConfig(RCC_SYSCLK_Div1); //HCLK = SYSCLK +// RCC_PCLK2Config(RCC_HCLK_Div1); //PCLK2 = HCLK +// RCC_PCLK1Config(RCC_HCLK_Div2); //PCLK1 = HCLK/2 +// RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); //PLLCLK = 8MHZ * 9 =72MHZ +// RCC_PLLCmd(ENABLE); //Enable PLLCLK +// +// while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); //Wait till PLLCLK is ready +// RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //Select PLL as system clock +// while(RCC_GetSYSCLKSource()!=0x08); //Wait till PLL is used as system clock source + +} + +void Nvic_Init(void) +{ + NVIC_InitTypeDef NVIC_InitStructure; + + NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); + + /* Enable and set EXTI Interrupt to the lowest priority */ + NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn; + NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 15; + NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; + NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; + + NVIC_Init(&NVIC_InitStructure); +} + +int Systick_Init(void) +{ + int time_retry = 500; + if (SysTick_Config(64000)) + { + /* Capture error */ + while (time_retry--); + return 1; + } + NVIC_SetPriority (SysTick_IRQn, 5); + + return 0; + +} diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Rcc_Nvic_Systick.h" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Rcc_Nvic_Systick.h" new file mode 100644 index 0000000..435b318 --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Rcc_Nvic_Systick.h" @@ -0,0 +1,11 @@ + +#ifndef __RCC_NVIC_SYSTICK_H__ +#define __RCC_NVIC_SYSTICK_H__ + +#include "stm32f10x.h" + +void Rcc_Init(void); +void Nvic_Init(void); +int Systick_Init(void); + +#endif diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Spi.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Spi.c" new file mode 100644 index 0000000..04ee781 --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Spi.c" @@ -0,0 +1,73 @@ +#include "Spi.h" + +void Spi_Init(void) +{ + SPI_InitTypeDef SPI_InitStructure; + GPIO_InitTypeDef GPIO_InitStructure; + + /* Enable GPIO clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); + /* Enable SPI clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); + + /* SPI GPIO setup */ + // SPIx SCK and MOSI pin setup + GPIO_InitStructure.GPIO_Pin = SPIx_SCK | SPIx_MOSI; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(SPIx_GPIO, &GPIO_InitStructure); + + // SPIx MISO pin setup + GPIO_InitStructure.GPIO_Pin = SPIx_MISO; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; + GPIO_Init(SPIx_GPIO, &GPIO_InitStructure); + + // SPIx CS pin setup + GPIO_InitStructure.GPIO_Pin = SPIx_CS; + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(SPIx_CS_GPIO, &GPIO_InitStructure); + + // Set CS high + GPIO_SetBits(SPIx_CS_GPIO, SPIx_CS); + + + SPI_I2S_DeInit(SPIx); + + // SPIx Mode setup + SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; + SPI_InitStructure.SPI_Mode = SPI_Mode_Master; + SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; + SPI_InitStructure.SPI_CPOL = SPIx_CPOL; + SPI_InitStructure.SPI_CPHA = SPIx_CPHA; + SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; + SPI_InitStructure.SPI_BaudRatePrescaler = SPIx_PRESCALER_SLOW; + SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; + SPI_InitStructure.SPI_CRCPolynomial = 7; + + SPI_Init(SPIx, &SPI_InitStructure); + + // Disable SPIx SS Output + SPI_SSOutputCmd(SPIx, DISABLE); + + // Enable SPIx + SPI_Cmd(SPIx, ENABLE); +} + + +void Spi_ChangePrescaler(uint16_t scaling_factor) +{ + uint16_t tmpreg = 0; + + /* Get the SPIx CR1 value */ + tmpreg = SPIx->CR1; + + /*clear the scaling bits*/ + tmpreg &= 0xFFC7; + + /*set the scaling bits*/ + tmpreg |= scaling_factor; + + /* Write to SPIx CR1 */ + SPIx->CR1 = tmpreg; +} diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Spi.h" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Spi.h" new file mode 100644 index 0000000..bdeaa69 --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Spi.h" @@ -0,0 +1,25 @@ + +#ifndef __SPI_H__ +#define __SPI_H__ + +#include "stm32f10x.h" + +#define SPIx_PRESCALER_SLOW SPI_BaudRatePrescaler_32 +#define SPIx_PRESCALER_FAST SPI_BaudRatePrescaler_8 + +#define SPIx SPI1 +#define SPIx_GPIO GPIOA +#define SPIx_CS GPIO_Pin_4 +#define SPIx_CS_GPIO GPIOA +#define SPIx_SCK GPIO_Pin_5 +#define SPIx_MISO GPIO_Pin_6 +#define SPIx_MOSI GPIO_Pin_7 + +#define SPIx_CPOL SPI_CPOL_Low +#define SPIx_CPHA SPI_CPHA_1Edge + + +void Spi_Init(void); +void Spi_ChangePrescaler(uint16_t scaling_factor); + +#endif diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Usart.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Usart.c" new file mode 100644 index 0000000..d410b56 --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Usart.c" @@ -0,0 +1,46 @@ +#include "Usart.h" + +void Usart_Init(void) +{ + USART_InitTypeDef USART_InitStructure; + GPIO_InitTypeDef GPIO_InitStructure; + + /* Enable GPIO clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); + /* Enable USART clock */ + RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); + + /* Configure USART Tx as alternate function push-pull */ + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; + GPIO_InitStructure.GPIO_Pin = USART_TX_pin; + GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; + GPIO_Init(USART_GPIO, &GPIO_InitStructure); + + /* Configure USART Rx as input floating */ + GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; + GPIO_InitStructure.GPIO_Pin = USART_RX_pin; + GPIO_Init(USART_GPIO, &GPIO_InitStructure); + + /* USARTx configured as follow: + - BaudRate = 115200 baud + - Word Length = 8 Bits + - One Stop Bit + - No parity + - Hardware flow control disabled (RTS and CTS signals) + - Receive and transmit enabled + */ + USART_InitStructure.USART_BaudRate = BAUD_RATE ; + USART_InitStructure.USART_WordLength = USART_WordLength_8b; + USART_InitStructure.USART_StopBits = USART_StopBits_1; + USART_InitStructure.USART_Parity = USART_Parity_No; + USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; + USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; + + /* USART configuration */ + USART_Init(EXT_USART, &USART_InitStructure); + + /* Enable USART */ + USART_Cmd(EXT_USART, ENABLE); + +} + diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Usart.h" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Usart.h" new file mode 100644 index 0000000..13d3a56 --- /dev/null +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/OnChipDevices/Usart.h" @@ -0,0 +1,18 @@ + +#ifndef __USART_H__ +#define __USART_H__ + +#include "stm32f10x.h" + +#define USART_TX_pin GPIO_Pin_9 +#define USART_RX_pin GPIO_Pin_10 +#define USART_GPIO GPIOA +#define EXT_USART USART1 + +#define BAUD_RATE 115200 + + +void Usart_Init(void); + +#endif + diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c" index 20697f8..995e3b7 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/main.c" @@ -24,6 +24,11 @@ #include "deca_sleep.h" #include "lcd.h" #include "port.h" +#include "Rcc_Nvic_Systick.h" +#include "Usart.h" +#include "Spi.h" +#include "dw_driver.h +#include "led.h" /* Example application name and version to display on LCD screen. */ #define APP_NAME "DS TWR INIT v1.1" @@ -207,21 +212,39 @@ uint8_t TAG_ID, ANCHOR_ID, jumptime = 0; uint32_t rec_dist, hex_dist; uint16_t check; + +void Device_Init(void) +{ + Rcc_Init(); + Nvic_Init(); + Systick_Init(); + Led_Init(); + DW_GPIO_Init(); + Usart_Init(); + Spi_Init(); + + GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); + +} + int main(void) { - RCC_ClocksTypeDef RCC_Clocks; /* Start with board specific hardware init. */ - peripherals_init();//初始化外设 - RCC_GetClocksFreq(&RCC_Clocks); + + Device_Init(); +// RCC_ClocksTypeDef RCC_Clocks; /* Start with board specific hardware init. */ +// peripherals_init();//初始化外设 +// RCC_GetClocksFreq(&RCC_Clocks); /* Display application name on LCD. */ // lcd_display_str(APP_NAME); /* Reset and initialise DW1000. * For initialisation, DW1000 clocks must be temporarily set to crystal speed. After initialisation SPI rate can be increased for optimum * performance. */ - reset_DW1000();//重启DW1000 /* Target specific drive of RSTn line into DW1000 low for a period. */ - spi_set_rate_low();//降低SPI频率 + Reset_DW1000();//重启DW1000 /* Target specific drive of RSTn line into DW1000 low for a period. */ +// spi_set_rate_low();//降低SPI频率 dwt_initialise(DWT_LOADUCODE);//初始化DW1000 - spi_set_rate_high();//回复SPI频率 +// spi_set_rate_high();//回复SPI频率 + Spi_ChangePrescaler(SPIx_PRESCALER_FAST); //设置为快速模式 /* Configure DW1000. See NOTE 6 below. */ dwt_configure(&config);//配置DW1000 diff --git "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/stm32f10x_it.c" "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/stm32f10x_it.c" index c86df78..30c04c1 100644 --- "a/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/stm32f10x_it.c" +++ "b/\346\272\220\347\240\201/\346\240\270\345\277\203\346\235\277/Src/stm32f10x_it.c" @@ -25,15 +25,9 @@ #include "stm32f10x.h" /* Tick timer count. */ volatile unsigned long time32_incr; -volatile unsigned long time32_reset = 0; void SysTick_Handler(void) { time32_incr++; - time32_reset++; - if(time32_reset > 10000) - { - NVIC_SystemReset(); - } } /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/ -- Gitblit v1.9.3