新手入门
- 积分
- 9
- 金钱
- 9
- 注册时间
- 2016-4-2
- 在线时间
- 1 小时
|
#include "stm32f0xx.h"
#include "stm32f0xx_conf.h"
#include "stm32f0xx_it.h"
#include <stdio.h>
#include "SYSTICK_51R8T6.H"
#include "UART_51R8T6.H"
#include "NVIC_51R8T6.H"
#include "TIMER_51R8T6.H"
#include "DS18B20_51R8T6.H"
#include "ADC_51R8T6.H"
#include "stm32f0xx_adc.h"
/* 类型定义 typedef------------------------------------------------------------*/
/* 预定义字符------------------------------------------------------------------*/
/* 宏定义----------------------------------------------------------------------*/
#define M 5 //为5个通道
/* 变量定义--------------------------------------------------------------------*/
/////////////////////////////////////////////////////////////////////
unsigned char tempL; //温度传感器低字节
unsigned char tempH; //温度传感器高字节
unsigned char LED_flag = 0 ;
extern unsigned int AD[M];
unsigned int led_num = 0;
unsigned char g_inbuf1[2];
/* 子函数声明------------------------------------------------------------------*/
void System_Clk_Config(void);
void Gpio_Init_Config(void);
void Pll_Init_Config(void);
void Led_Test_PC8(void);
void Led_Test_PC9(void);
void Led_Test_PC8_PC9(void);
void Led_off(void);
/********************************************************************************
函数名称:main()
功 能:主函数入口
参 数:无
返 回 值:无
*********************************************************************************/
int main(void)
{
unsigned char AD_Temp[10]={0x00};
unsigned char i;
led_num =200;
///////////////////////////////////////////////////////////////////////////////
SystemInit (); //系统时钟配置函数 通过不同的定义 来选择不同的主频
Gpio_Init_Config();
NVIC_config(); /*嵌套向量中断控制器 */
delay_init();
Uart_Init();
//Timer2_Init();
///////////////////////////////////////////////////////////////////////////////
//Display_ConfigMenu();
///////////////////////////////////////////////////////////////////////////////
if(DS18B20_Reset())//初始化DS18B20,兼检测18B20
{
printf("DS18B20 检测失败! \r\n");
}
else
printf("DS18B20 初始化成功! \r\n");
while (1)
{
if(g_inbuf1[0]== 0xDD)
{
LED_flag =1;
ADC_StopOfConversion(ADC1);
}
if(LED_flag ==1)
{
if(g_inbuf1[0]== 0x01)
{
Led_Test_PC8();
}
if(g_inbuf1[0]== 0x02)
{
Led_Test_PC9();
}
if(g_inbuf1[0]== 0x03)
{
Led_Test_PC8_PC9();
}
if(g_inbuf1[0]== 0x04)
{
Led_off();
}
}
if(g_inbuf1[0] ==0xEE)
{
LED_flag = 0;
ADC_StopOfConversion(ADC1);
DS18B20_Convert();
tempL = DS18B20_Read_Byte(); // LSB
tempH = DS18B20_Read_Byte(); // MSB
Uart_Put_Char(tempL);
Uart_Put_Char(tempH);
}
if(g_inbuf1[0]== 0xFF)
{
LED_flag = 0;
ADC_DMA_Reset();
ADC_StartOfConversion(ADC1); //开始数据采集;
///////////////////////////////////////////////////
//
AD_Temp[0]= AD[0];
AD_Temp[1]= AD[0]/256;
AD_Temp[2]= AD[1];
AD_Temp[3]= AD[1]/256;
AD_Temp[4]= AD[2];
AD_Temp[5]= AD[2]/256;
AD_Temp[6]= AD[3];
AD_Temp[7]= AD[3]/256;
AD_Temp[8]= AD[4];
AD_Temp[9]= AD[4]/256;
for(i=0;i<10;i++)
{
Uart_Put_Char(AD_Temp);
Delay(5000);
}
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
/********************************************************************************
函数名称:SYSTEM_CLK_Config()
功 能:系统时钟配置
参 数:无
返 回 值:无
*********************************************************************************/
void System_Clk_Config(void)
{
RCC_HSEConfig(RCC_HSE_ON); /* 使能外部高速时钟 HSE */
while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET); /* 等待HSE就绪 */
RCC_PLLCmd(ENABLE); /* 使能锁相环PLL */
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); /* 等待PLL就绪*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* 选择PLL为系统时钟 */
while (RCC_GetSYSCLKSource() != 0x08); /* 等待PLL已经成功成为系统时钟 */
}
/********************************************************************************
函数名称:Pll_Init_Config()
功 能:PLL配置
参 数:无
返 回 值:无
*********************************************************************************/
void Pll_Init_Config(void)
{
RCC_ClocksTypeDef RCC_ClockFreq;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_GetClocksFreq(&RCC_ClockFreq);
/* 使能时钟安全系统(CSS): HSE出现故障时产生一个NMI异常***********************/
RCC_ClockSecuritySystemCmd(ENABLE);
/* Enable and configure RCC global IRQ channel, will be used to manage HSE ready
and PLL ready interrupts.
These interrupts are enabled in stm32f0xx_it.c file **********************/
NVIC_InitStructure.NVIC_IRQChannel = RCC_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/********************************************************************************
函数名称:Gpio_Init_Config()
功 能:GPIO配置
参 数:无
返 回 值:无
*********************************************************************************/
void Gpio_Init_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* GPIOC 外部时钟使能 */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
// RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
/* 配置 PC8 and PC9 外部输出上拉模式 */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
/********************************************************************************
函数名称:Led_Test_PC8()
功 能:闪灯--PC8--蓝色
参 数:无
返 回 值:无
*********************************************************************************/
void Led_Test_PC8(void)
{
GPIO_ResetBits( GPIOC,GPIO_Pin_9);
GPIO_WriteBit(GPIOC, GPIO_Pin_8, (BitAction)((1-GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_8))));
delay_ms(led_num);
}
/********************************************************************************
函数名称:Led_Test_PC9()
功 能:闪灯--PC9-绿色
参 数:无
返 回 值:无
*********************************************************************************/
void Led_Test_PC8_PC9(void)
{
GPIO_WriteBit(GPIOC, GPIO_Pin_8|GPIO_Pin_9, (BitAction)((1-GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_8|GPIO_Pin_9))));
delay_ms(led_num);
}
/********************************************************************************
函数名称:Led_Test_PC9()
功 能:闪灯--PC9-绿色
参 数:无
返 回 值:无
*********************************************************************************/
void Led_Test_PC9(void)
{
GPIO_ResetBits( GPIOC,GPIO_Pin_8);
GPIO_WriteBit(GPIOC, GPIO_Pin_9, (BitAction)((1-GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_9))));
delay_ms(led_num);
}
/********************************************************************************
函数名称:Led_off()
功 能:关掉所有的灯
参 数:无
返 回 值:无
*********************************************************************************/
void Led_off(void)
{
GPIO_ResetBits( GPIOC,GPIO_Pin_8 | GPIO_Pin_9);
}
///////////////////////////////////////////////////////////////////////////////////////
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t* file, uint32_t line)
{
while (1)
{
}
}
#endif
图中红色文字部分
|
|