/*
°æ±¾200901-D1
Ôö¼Ó³¬¹ýADÖµ10¼ì²â³É¹¦
¶à·¢Ò»¸öCANIDÊý¾Ý
Ôö¼ÓÕ¼ÓóöÇåʵÏÖ³ÌÐò
*/
#include "stm32f10x.h"
#include "led.h"
#include "dac.h"
#include "adc.h"
#include "timer.h"
#include "can.h"
#include "crc8_16.h"
u8 fv,fv2,fv2_falg,i,ii,timer_value,flash_flag,a_num,b_num;
u32 ADC1_ConvertedValue,ADC2_ConvertedValue,adjust1,adjust2,adjust3,adjust4,a_com,b_com;
u8 JZdata[20];
u8 ZYdata[8];
u16 xl;
u16 crc;
CanRxMsg RxMessage1;
CanTxMsg TxMessage;
CanTxMsg TxMessage_1; //Ôö¼ÓÒ»¸öCANIDÓÃÓÚ¿ØÖÆÕ¼ÓóöÇå
void IWDG_Configuration(void);
void self_checking(void);
void delay_us(u32 nTimer);
void delay_ms(u32 nTimer);
const uint16_t Sine12bit[50] = {
0x7FF,0x900,0x9FC,0xAF1,0xBD9,0xCB2,0xD79,0xE29,0xEC0,0xF3C,0xF9A,0xFDA,0xFFA,0xFFA,0xFDA,0xF9A
,0xF3C,0xEC0,0xE29,0xD79,0xCB2,0xBD9,0xAF1,0x9FC,0x900,0x7FF,0x6FE,0x602,0x50D,0x425,0x34C,0x285
,0x1D5,0x13E,0x0C2,0x064,0x024,0x004,0x004,0x024,0x064,0x0C2,0x13E,0x1D5,0x285,0x34C,0x425,0x50D
,0x602,0x6FE};
//const uint16_t Sine12bit[128] = {
//2148,2249,2349,2448,2546,2643,2738,2832,2924,3013,3101,
// 3186,3268,3347,3423,3496,3565,3631,3693,3751,3805,3854,
// 3899,3940,3976,4008,4035,4057,4074,4086,4094,4095,4094,
// 4086,4074,4057,4035,4008,3976,3940,3899,3854,3805,3751,
// 3693,3631,3565,3496,3423,3347,3268,3186,3101,3013,2924,
// 2832,2738,2643,2546,2448,2349,2249,2148,2048,1948,1847,
// 1747,1648,1550,1453,1358,1264,1172,1083,995,910,828,749,
// 673,600,531,465,403,345,291,242,197,156,120,88,61,39,22,
// 10,2,0,2,10,22,39,61,88,120,156,197,242,291,345,403,465,531,
// 600,673,749,828,910,995,1083,1172,1264,1358,1453,1550,1648,
// 1747,1847,1948,2048};
int main()
{
LED_Init(); //³õʼ»¯LED
DAC_DMA_Configuration();
ADC1_Init();
CAN_Configuration();
TIM3_Base_Init(100); //1s=10000 10ºÁÃë²É¼¯Ò»´ÎÊý¾Ý
fv=0;
fv2=0;
fv2_falg=0;
timer_value=0;
ii=0;
xl=0;
delay_ms(2500); //Ô°æÑÓʱ2500
TxMessage.StdId=210; //´Ë´¦ÐÞ¸ÄcanID ¼ÆÖá°åµÄ
TxMessage.ExtId=0;
TxMessage.IDE=CAN_ID_STD;
TxMessage.RTR=CAN_RTR_DATA;//Êý¾ÝÖ¡
TxMessage.DLC=8;//Êý¾Ý³¤¶È8B
JZdata[2]=0x10;
JZdata[6]=0x0c;
// TxMessage_1.StdId=212; //´Ë´¦ÐÞ¸ÄcanID Õ¼ÓóöÇå°å×ÓCANID
// TxMessage_1.ExtId=0;
// TxMessage_1.IDE=CAN_ID_STD;
// TxMessage_1.RTR=CAN_RTR_DATA;//Êý¾ÝÖ¡
// TxMessage_1.DLC=8;//Êý¾Ý³¤¶È8B
a_num=0;
b_num=0;
self_checking();
while(1)
{
if(fv==1)
{
ADC1_ConvertedValue=0; //ADC1 ת»»Öµ
ADC2_ConvertedValue=0; //ADC2 ת»»Öµ
ii++; //¿´ÃŹ·
timer_value++; //Ñ»·²É¼¯10ºó£¬
for(i=0;i<50;i++) //ÀÛ¼Æ50´ÎADCת»»Öµ
{
ADC1_ConvertedValue+=(adc1data[i]&0x0000ffff); //u32 Êý×éµÍ16λ ADC1µÄת»»Öµ
ADC2_ConvertedValue+=(adc1data[i]>>16); //u32 Êý×é¸ß16λ ADC2µÄת»»Öµ
}
ADC1_ConvertedValue/=50; //50´Îƽ¾ùÖµ
ADC2_ConvertedValue/=50; //
if((ADC1_ConvertedValue>adjust3)||(ADC1_ConvertedValue<adjust1))
{
GPIOC->BRR=0x0040; //¿ªµÆ
a_num=0x01;
TxMessage_1.Data[2]=0x10;//¶ÔÓ¦ÏßȦ1,Õ¼Óõçѹ
}
else
{
a_num=0x00;
TxMessage_1.Data[2]=0x01;//¶ÔÓ¦ÏßȦ1,³öÇåµçѹ
GPIOC->BSRR=0x0040;
}
if((ADC2_ConvertedValue>adjust4)||(ADC2_ConvertedValue<adjust2))
{
GPIOC->BRR=0x0080;
b_num=0x10;
TxMessage_1.Data[3]=0x10;//¶ÔÓ¦ÏßȦ2,Õ¼Óõçѹ
}
else
{
b_num=0x00;
TxMessage_1.Data[3]=0x01;//¶ÔÓ¦ÏßȦ2,³öÇåµçѹ
GPIOC->BSRR=0x0080;
}
//
if((adjust3>a_com>adjust1)&&(adjust4>b_com>adjust2))
{
JZdata[timer_value+9]=0x00;
a_num=0x00;
b_num=0x00;
GPIOC->BSRR=0x00c0; //Á½¸öµÆÃð
}
JZdata[timer_value+9]=a_num+b_num;
// if(fv2_falg==1) //ÿ¸ô1S£¬·¢ËÍÕ¼ÓóöÇåµÄÊý¾Ý
// {
//
// TxMessage_1.Data[0]=0x11;
// TxMessage_1.Data[1]=0x00;
// TxMessage_1.Data[2]=TxMessage_1.Data[2]+0x00;
// TxMessage_1.Data[3]=TxMessage_1.Data[3]+0x00;
// TxMessage_1.Data[4]=0x00;
// TxMessage_1.Data[5]=0x00;
// TxMessage_1.Data[6]=0x00;
// TxMessage_1.Data[7]=0x00;
// CAN_Transmit(CAN1,&TxMessage_1);
// fv2_falg=0;
// }
if(timer_value==10)
{
timer_value=0;
xl++;
JZdata[0]=xl;
JZdata[1]=xl>>8;
crc=Get_Crc16(JZdata,20);
TxMessage.Data[0]=0x7E;
TxMessage.Data[1]=JZdata[0];
TxMessage.Data[2]=JZdata[1];
TxMessage.Data[3]=JZdata[2];
TxMessage.Data[4]=JZdata[3];
TxMessage.Data[5]=JZdata[4];
TxMessage.Data[6]=JZdata[5];
TxMessage.Data[7]=JZdata[6];
CAN_Transmit(CAN1,&TxMessage);
TxMessage.Data[0]=JZdata[7];
TxMessage.Data[1]=JZdata[8];
TxMessage.Data[2]=JZdata[9];
TxMessage.Data[3]=JZdata[10];
TxMessage.Data[4]=JZdata[11];
TxMessage.Data[5]=JZdata[12];
TxMessage.Data[6]=JZdata[13];
TxMessage.Data[7]=JZdata[14];
CAN_Transmit(CAN1,&TxMessage);
TxMessage.Data[0]=JZdata[15];
TxMessage.Data[1]=JZdata[16];
TxMessage.Data[2]=JZdata[17];
TxMessage.Data[3]=JZdata[18];
TxMessage.Data[4]=JZdata[19];
TxMessage.Data[5]=crc;
TxMessage.Data[6]=crc>>8;
TxMessage.Data[7]=0x7F;
CAN_Transmit(CAN1,&TxMessage);
if(xl==60000){xl=0;}
}
if(ii==50)
{
IWDG_ReloadCounter();
GPIOC->BRR=0x0020; //µçÔ´¹¤×÷ָʾµÆ
}
if(ii==100){IWDG_ReloadCounter();
GPIOC->BSRR=0x0020;
ii=0;}
fv=0;
}
}
}
void USB_LP_CAN1_RX0_IRQHandler(void)
{
CAN_Receive(CAN1,CAN_FIFO0, &RxMessage1);
// DataValue=1;
// if(RxMessage1.StdId==200){flash_flag=1;}
CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0);
}
void USB_HP_CAN1_TX_IRQHandler(void) //CAN TX
{
if (CAN_GetITStatus(CAN1,CAN_IT_TME)!= RESET)
{
CAN_ClearITPendingBit(CAN1,CAN_IT_TME);
}
}
void TIM3_IRQHandler(void) //TIM3ÖжÏ
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //¼ì²éÖ¸¶¨µÄTIMÖжϷ¢ÉúÓë·ñ:TIM ÖжÏÔ´
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //Çå³ýTIMxµÄÖжϴý´¦Àíλ:TIM ÖжÏÔ´
fv=1;
if(fv2_falg==0)fv2++;
if(fv2==100)
{
fv2_falg=1;
fv2=0;
}
}
}
void self_checking(void)
{
u8 i;
for(i=0;i<50;i++)
{
ADC1_ConvertedValue+=(adc1data[i]&0x0000ffff);
ADC2_ConvertedValue+=(adc1data[i]>>16);
}
ADC1_ConvertedValue/=50;
ADC2_ConvertedValue/=50;
adjust1=ADC1_ConvertedValue-20; //Ô°æÊÇ-100
adjust2=ADC2_ConvertedValue-20; //Ô°æÊÇ-100
adjust3=ADC1_ConvertedValue+20; //
adjust4=ADC2_ConvertedValue+20; //
}
void IWDG_Configuration(void)
{
IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable);
IWDG_SetPrescaler(IWDG_Prescaler_64);
IWDG_SetReload(800);
IWDG_ReloadCounter();
IWDG_Enable();
}
void delay_us(u32 nTimer)
{
u32 i=0;
for(i=0;i<nTimer;i++){
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();
}
}
void delay_ms(u32 nTimer)
{
u32 i=1000*nTimer;
delay_us(i);
}