Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
Minaduki Shigure
Winter_Proj_ARM
Commits
8e19dce8
Verified
Commit
8e19dce8
authored
Dec 17, 2019
by
Minaduki Shigure
Browse files
Rearranged files.
parent
1e8cfb1d
Changes
162
Expand all
Hide whitespace changes
Inline
Side-by-side
CORE/core_cm3.c
View file @
8e19dce8
This diff is collapsed.
Click to expand it.
CORE/core_cm3.h
View file @
8e19dce8
This diff is collapsed.
Click to expand it.
CORE/startup_stm32f10x_hd.s
View file @
8e19dce8
This diff is collapsed.
Click to expand it.
CORE/startup_stm32f10x_md.s
View file @
8e19dce8
This diff is collapsed.
Click to expand it.
HARDWARE/ADC/adc.c
View file @
8e19dce8
#include
"adc.h"
#include
"delay.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK miniSTM32开发板
//ADC 代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2012/9/7
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//初始化ADC
//这里我们仅以规则通道为例
//我们默认将开启通道0~3
void
Adc_Init
(
void
)
{
ADC_InitTypeDef
ADC_InitStructure
;
GPIO_InitTypeDef
GPIO_InitStructure
;
RCC_APB2PeriphClockCmd
(
RCC_APB2Periph_GPIOA
|
RCC_APB2Periph_ADC1
,
ENABLE
);
//使能ADC1通道时钟
RCC_ADCCLKConfig
(
RCC_PCLK2_Div6
);
//设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M
//PA1 作为模拟通道输入引脚
GPIO_InitStructure
.
GPIO_Pin
=
GPIO_Pin_1
;
GPIO_InitStructure
.
GPIO_Mode
=
GPIO_Mode_AIN
;
//模拟输入引脚
GPIO_Init
(
GPIOA
,
&
GPIO_InitStructure
);
ADC_DeInit
(
ADC1
);
//复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值
ADC_InitStructure
.
ADC_Mode
=
ADC_Mode_Independent
;
//ADC工作模式:ADC1和ADC2工作在独立模式
ADC_InitStructure
.
ADC_ScanConvMode
=
DISABLE
;
//模数转换工作在单通道模式
ADC_InitStructure
.
ADC_ContinuousConvMode
=
DISABLE
;
//模数转换工作在单次转换模式
ADC_InitStructure
.
ADC_ExternalTrigConv
=
ADC_ExternalTrigConv_None
;
//转换由软件而不是外部触发启动
ADC_InitStructure
.
ADC_DataAlign
=
ADC_DataAlign_Right
;
//ADC数据右对齐
ADC_InitStructure
.
ADC_NbrOfChannel
=
1
;
//顺序进行规则转换的ADC通道的数目
ADC_Init
(
ADC1
,
&
ADC_InitStructure
);
//根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
ADC_Cmd
(
ADC1
,
ENABLE
);
//使能指定的ADC1
ADC_ResetCalibration
(
ADC1
);
//使能复位校准
while
(
ADC_GetResetCalibrationStatus
(
ADC1
));
//等待复位校准结束
ADC_StartCalibration
(
ADC1
);
//开启AD校准
while
(
ADC_GetCalibrationStatus
(
ADC1
));
//等待校准结束
// ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能
}
//获得ADC值
//ch:通道值 0~3
u16
Get_Adc
(
u8
ch
)
{
//设置指定ADC的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig
(
ADC1
,
ch
,
1
,
ADC_SampleTime_239Cycles5
);
//ADC1,ADC通道,采样时间为239.5周期
ADC_SoftwareStartConvCmd
(
ADC1
,
ENABLE
);
//使能指定的ADC1的软件转换启动功能
while
(
!
ADC_GetFlagStatus
(
ADC1
,
ADC_FLAG_EOC
));
//等待转换结束
return
ADC_GetConversionValue
(
ADC1
);
//返回最近一次ADC1规则组的转换结果
}
u16
Get_Adc_Average
(
u8
ch
,
u8
times
)
{
u32
temp_val
=
0
;
u8
t
;
for
(
t
=
0
;
t
<
times
;
t
++
)
{
temp_val
+=
Get_Adc
(
ch
);
delay_ms
(
5
);
}
return
temp_val
/
times
;
}
#include
"adc.h"
#include
"delay.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK miniSTM32开发板
//ADC 代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2012/9/7
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//初始化ADC
//这里我们仅以规则通道为例
//我们默认将开启通道0~3
void
Adc_Init
(
void
)
{
ADC_InitTypeDef
ADC_InitStructure
;
GPIO_InitTypeDef
GPIO_InitStructure
;
RCC_APB2PeriphClockCmd
(
RCC_APB2Periph_GPIOA
|
RCC_APB2Periph_ADC1
,
ENABLE
);
//使能ADC1通道时钟
RCC_ADCCLKConfig
(
RCC_PCLK2_Div6
);
//设置ADC分频因子6 72M/6=12,ADC最大时间不能超过14M
//PA1 作为模拟通道输入引脚
GPIO_InitStructure
.
GPIO_Pin
=
GPIO_Pin_1
;
GPIO_InitStructure
.
GPIO_Mode
=
GPIO_Mode_AIN
;
//模拟输入引脚
GPIO_Init
(
GPIOA
,
&
GPIO_InitStructure
);
ADC_DeInit
(
ADC1
);
//复位ADC1,将外设 ADC1 的全部寄存器重设为缺省值
ADC_InitStructure
.
ADC_Mode
=
ADC_Mode_Independent
;
//ADC工作模式:ADC1和ADC2工作在独立模式
ADC_InitStructure
.
ADC_ScanConvMode
=
DISABLE
;
//模数转换工作在单通道模式
ADC_InitStructure
.
ADC_ContinuousConvMode
=
DISABLE
;
//模数转换工作在单次转换模式
ADC_InitStructure
.
ADC_ExternalTrigConv
=
ADC_ExternalTrigConv_None
;
//转换由软件而不是外部触发启动
ADC_InitStructure
.
ADC_DataAlign
=
ADC_DataAlign_Right
;
//ADC数据右对齐
ADC_InitStructure
.
ADC_NbrOfChannel
=
1
;
//顺序进行规则转换的ADC通道的数目
ADC_Init
(
ADC1
,
&
ADC_InitStructure
);
//根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器
ADC_Cmd
(
ADC1
,
ENABLE
);
//使能指定的ADC1
ADC_ResetCalibration
(
ADC1
);
//使能复位校准
while
(
ADC_GetResetCalibrationStatus
(
ADC1
));
//等待复位校准结束
ADC_StartCalibration
(
ADC1
);
//开启AD校准
while
(
ADC_GetCalibrationStatus
(
ADC1
));
//等待校准结束
// ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能指定的ADC1的软件转换启动功能
}
//获得ADC值
//ch:通道值 0~3
u16
Get_Adc
(
u8
ch
)
{
//设置指定ADC的规则组通道,一个序列,采样时间
ADC_RegularChannelConfig
(
ADC1
,
ch
,
1
,
ADC_SampleTime_239Cycles5
);
//ADC1,ADC通道,采样时间为239.5周期
ADC_SoftwareStartConvCmd
(
ADC1
,
ENABLE
);
//使能指定的ADC1的软件转换启动功能
while
(
!
ADC_GetFlagStatus
(
ADC1
,
ADC_FLAG_EOC
));
//等待转换结束
return
ADC_GetConversionValue
(
ADC1
);
//返回最近一次ADC1规则组的转换结果
}
u16
Get_Adc_Average
(
u8
ch
,
u8
times
)
{
u32
temp_val
=
0
;
u8
t
;
for
(
t
=
0
;
t
<
times
;
t
++
)
{
temp_val
+=
Get_Adc
(
ch
);
delay_ms
(
5
);
}
return
temp_val
/
times
;
}
HARDWARE/ADC/adc.h
View file @
8e19dce8
#ifndef __ADC_H
#define __ADC_H
#include
"sys.h"
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK战舰STM32开发板
//ADC 代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2012/9/7
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
void
Adc_Init
(
void
);
u16
Get_Adc
(
u8
ch
);
u16
Get_Adc_Average
(
u8
ch
,
u8
times
);
#endif
#ifndef __ADC_H
#define __ADC_H
#include
"sys.h"
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK战舰STM32开发板
//ADC 代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2012/9/7
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
void
Adc_Init
(
void
);
u16
Get_Adc
(
u8
ch
);
u16
Get_Adc_Average
(
u8
ch
,
u8
times
);
#endif
HARDWARE/DAC/dac.c
View file @
8e19dce8
#include
"dac.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK战舰STM32开发板
//DAC 代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2012/9/8
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//DAC通道1输出初始化
void
Dac1_Init
(
void
)
{
GPIO_InitTypeDef
GPIO_InitStructure
;
DAC_InitTypeDef
DAC_InitType
;
RCC_APB2PeriphClockCmd
(
RCC_APB2Periph_GPIOA
,
ENABLE
);
//使能PORTA通道时钟
RCC_APB1PeriphClockCmd
(
RCC_APB1Periph_DAC
,
ENABLE
);
//使能DAC通道时钟
GPIO_InitStructure
.
GPIO_Pin
=
GPIO_Pin_4
;
// 端口配置
GPIO_InitStructure
.
GPIO_Mode
=
GPIO_Mode_AIN
;
//模拟输入
GPIO_InitStructure
.
GPIO_Speed
=
GPIO_Speed_50MHz
;
GPIO_Init
(
GPIOA
,
&
GPIO_InitStructure
);
GPIO_SetBits
(
GPIOA
,
GPIO_Pin_4
)
;
//PA.4 输出高
DAC_InitType
.
DAC_Trigger
=
DAC_Trigger_None
;
//不使用触发功能 TEN1=0
DAC_InitType
.
DAC_WaveGeneration
=
DAC_WaveGeneration_None
;
//不使用波形发生
DAC_InitType
.
DAC_LFSRUnmask_TriangleAmplitude
=
DAC_LFSRUnmask_Bit0
;
//屏蔽、幅值设置
DAC_InitType
.
DAC_OutputBuffer
=
DAC_OutputBuffer_Disable
;
//DAC1输出缓存关闭 BOFF1=1
DAC_Init
(
DAC_Channel_1
,
&
DAC_InitType
);
//初始化DAC通道1
DAC_Cmd
(
DAC_Channel_1
,
ENABLE
);
//使能DAC1
DAC_SetChannel1Data
(
DAC_Align_12b_R
,
0
);
//12位右对齐数据格式设置DAC值
}
//设置通道1输出电压
//vol:0~3300,代表0~3.3V
void
Dac1_Set_Vol
(
u16
vol
)
{
float
temp
=
vol
;
temp
/=
1000
;
temp
=
temp
*
4096
/
3
.
3
;
DAC_SetChannel1Data
(
DAC_Align_12b_R
,
temp
);
//12位右对齐数据格式设置DAC值
}
#include
"dac.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK战舰STM32开发板
//DAC 代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2012/9/8
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//DAC通道1输出初始化
void
Dac1_Init
(
void
)
{
GPIO_InitTypeDef
GPIO_InitStructure
;
DAC_InitTypeDef
DAC_InitType
;
RCC_APB2PeriphClockCmd
(
RCC_APB2Periph_GPIOA
,
ENABLE
);
//使能PORTA通道时钟
RCC_APB1PeriphClockCmd
(
RCC_APB1Periph_DAC
,
ENABLE
);
//使能DAC通道时钟
GPIO_InitStructure
.
GPIO_Pin
=
GPIO_Pin_4
;
// 端口配置
GPIO_InitStructure
.
GPIO_Mode
=
GPIO_Mode_AIN
;
//模拟输入
GPIO_InitStructure
.
GPIO_Speed
=
GPIO_Speed_50MHz
;
GPIO_Init
(
GPIOA
,
&
GPIO_InitStructure
);
GPIO_SetBits
(
GPIOA
,
GPIO_Pin_4
)
;
//PA.4 输出高
DAC_InitType
.
DAC_Trigger
=
DAC_Trigger_None
;
//不使用触发功能 TEN1=0
DAC_InitType
.
DAC_WaveGeneration
=
DAC_WaveGeneration_None
;
//不使用波形发生
DAC_InitType
.
DAC_LFSRUnmask_TriangleAmplitude
=
DAC_LFSRUnmask_Bit0
;
//屏蔽、幅值设置
DAC_InitType
.
DAC_OutputBuffer
=
DAC_OutputBuffer_Disable
;
//DAC1输出缓存关闭 BOFF1=1
DAC_Init
(
DAC_Channel_1
,
&
DAC_InitType
);
//初始化DAC通道1
DAC_Cmd
(
DAC_Channel_1
,
ENABLE
);
//使能DAC1
DAC_SetChannel1Data
(
DAC_Align_12b_R
,
0
);
//12位右对齐数据格式设置DAC值
}
//设置通道1输出电压
//vol:0~3300,代表0~3.3V
void
Dac1_Set_Vol
(
u16
vol
)
{
float
temp
=
vol
;
temp
/=
1000
;
temp
=
temp
*
4096
/
3
.
3
;
DAC_SetChannel1Data
(
DAC_Align_12b_R
,
temp
);
//12位右对齐数据格式设置DAC值
}
HARDWARE/DAC/dac.h
View file @
8e19dce8
#ifndef __DAC_H
#define __DAC_H
#include
"sys.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK战舰STM32开发板
//DAC 代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2012/9/8
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
void
Dac1_Init
(
void
);
//回环模式初始化
void
Dac1_Set_Vol
(
u16
vol
);
#endif
#ifndef __DAC_H
#define __DAC_H
#include
"sys.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK战舰STM32开发板
//DAC 代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2012/9/8
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
void
Dac1_Init
(
void
);
//回环模式初始化
void
Dac1_Set_Vol
(
u16
vol
);
#endif
HARDWARE/EXTI/exti.c
View file @
8e19dce8
#include
"exti.h"
#include
"led.h"
#include
"lcd.h"
#include
"delay.h"
#include
"usart.h"
#include
"spix.h"
#include
"usart.h"
//////////////////////////////////////////////////////////////////////////////////
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//Mini STM32开发板
//外部中断 驱动代码
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//修改日期:2010/12/01
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 正点原子 2009-2019
//All rights reserved
//////////////////////////////////////////////////////////////////////////////////
//uint64_t SPI_NULL=0x0000000000000000;
//uint64_t Data_R;
//外部中断初始化函数
//void EXTIX_Init(void)
//{
// EXTI_InitTypeDef EXTI_InitStructure;
// NVIC_InitTypeDef NVIC_InitStructure;
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//外部中断,需要使能AFIO时钟
// //GPIO A1 中断线以及中断初始化配置
// 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_Rising;//上升沿触发
// EXTI_InitStructure.EXTI_LineCmd = ENABLE;
// EXTI_Init(&EXTI_InitStructure); //根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
//
// NVIC_InitStructure.NVIC_IRQChannel = EXTI1_IRQn; //使能外部中断通道
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02; //抢占优先级2
// NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02; //子优先级1
// NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道
// NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
//}
//void EXTI1_IRQHandler(void)
//{
// GPIO_SetBits(SPI_PORT, SPI_FLAG);//flag = 1;
//
// LED0=!LED0;
// Data_R=SPIx_SendReadByte36(0xF0000001E);
// if((Data_R&0x100000000)==0x100000000)
// {
// LED1=!LED1;
// data1=Data_R&011111111;
// }
// if((Data_R&0x200000000)==0x200000000)
// {
// data2=Data_R&011111111;
// LED1=!LED1;
// }
// if((Data_R&0x300000000)==0x300000000)
// {
// data3=Data_R&011111111;
// LED1=!LED1;
// }
// if((Data_R&0x500000000)==0x500000000)
// {
// data4=Data_R&011111111;
// LED1=!LED1;
// }