Verified Commit 8e19dce8 authored by Minaduki Shigure's avatar Minaduki Shigure
Browse files

Rearranged files.

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