亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.c

?? 基于stm32f103rb微處理器的can總線發送程序
?? C
字號:
/*******************************************************************************
* 程序說明:can總線測試,工作在正常模式,發送數據
* 作者:xiaocai_cqu
* 版本:v1.0
*******************************************************************************/

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_lib.h"

/* Local includes ------------------------------------------------------------*/
/* Private typedef -----------------------------------------------------------*/
typedef enum {FAILED = 0, PASSED = !FAILED} TestStatus;

/* Private define ------------------------------------------------------------*/
#define TME0 	(CAN->TSR&CAN_TSR_TME0)== CAN_TSR_TME0
#define TME1 	(CAN->TSR&CAN_TSR_TME1)== CAN_TSR_TME1
#define TME2 	(CAN->TSR&CAN_TSR_TME2)== CAN_TSR_TME2
#define All_TransMB_Empty TME0&TME1&TME2
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
vu32 ret,ret1; /* for return of the interrupt handling */
volatile TestStatus TestRx;
ErrorStatus HSEStartUpStatus;
CanTxMsg TxMessage;
/* Private functions ---------------------------------------------------------*/
void RCC_Configuration(void);
void GPIO_Configuration(void);
void NVIC_Configuration(void);
TestStatus CAN_Interrupt(void);	
//TestStatus CAN_Polling(void);

/*******************************************************************************
* Function Name  : main
* Description    : Main program
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
int main(void)
{

#ifdef DEBUG
  debug();
#endif

  /* System Clocks Configuration */
  RCC_Configuration();

  /* NVIC Configuration */
  NVIC_Configuration();
  
  /* GPIO ports pins Configuration */
  GPIO_Configuration();
  
  /* CAN transmit at 500Kb/s and receive by interrupt in loopback mode*/
  TestRx = CAN_Interrupt();//發送擴展數據幀

  if (TestRx ==!FAILED)    //如果中斷發送擴展數據幀成功,點亮led4
  {
    /* Turn on led connected to PB.11 pin (LD4) */
    GPIO_SetBits(GPIOB, GPIO_Pin_11); 
  }
    
  while(1)
  {
  }
}

/*******************************************************************************
* Function Name  : RCC_Configuration
* Description    : Configures the different system clocks.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void RCC_Configuration(void)
{
//  /* RCC system reset(for debug purpose) */
//  RCC_DeInit();
//
//  /* Enable HSE */
//  RCC_HSEConfig(RCC_HSE_ON);
//
//  /* Wait till HSE is ready */
//  HSEStartUpStatus = RCC_WaitForHSEStartUp();
//
//  if(HSEStartUpStatus == SUCCESS)
//  {
//    /* HCLK = SYSCLK */
//    RCC_HCLKConfig(RCC_SYSCLK_Div1); 
//  
//    /* PCLK2 = HCLK */
//    RCC_PCLK2Config(RCC_HCLK_Div1); 
//
//    /* PCLK1 = HCLK/2 */
//    RCC_PCLK1Config(RCC_HCLK_Div2);
//
//    /* Enable Prefetch Buffer */
//    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
//
//    /* Select HSE as system clock source */
//    RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);
//
//    /* Wait till HSE is used as system clock source */
//    while(RCC_GetSYSCLKSource() != 0x04)
//    {
//    }
//  }
//  
//  /* GPIOB clock enable */
//  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO, ENABLE);	//
//
//  /* CAN Periph clock enable */
//  RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE);

  /* RCC system reset(for debug purpose) */
  RCC_DeInit();

  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);/****************** External 8 MHz ************************************/

  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if (HSEStartUpStatus == SUCCESS)
  {
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);

    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);/****************** HCLK 72 MHz ************************************/

    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);/****************** PCLK2 72 MHz ************************************/

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);/****************** PCLK1 36 MHz ************************************/

    /* ADCCLK = PCLK2/6 */
    RCC_ADCCLKConfig(RCC_PCLK2_Div6);/****************** ADC 12 MHz ************************************/


    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);/****************** PLL 8*9=72 MHz *************/

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);

    /* Wait till PLL is ready */
    while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {};

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/*************SYSCLK 72 MHz*******************************/

    /* Wait till PLL is used as system clock source */
    while (RCC_GetSYSCLKSource() != 0x08)
    {};
    //使能時鐘
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO , ENABLE);
   
 
  }


}

/*******************************************************************************
* Function Name  : GPIO_Configuration
* Description    : Configures the different GPIO ports.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  /* Configure PB.10 and PB.11 as Output push-pull 用作led燈*/
  GPIO_InitStructure.GPIO_Pin =GPIO_Pin_10 | GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  
  
  /* Configure CAN pin: RX-PB8*/
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
  
  /* Configure CAN pin: TX-PB9*/ 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);  
   
}

/*******************************************************************************
* Function Name  : NVIC_Configuration
* Description    : Configures the NVIC and Vector Table base address.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void NVIC_Configuration(void)
{
  //NVIC_InitTypeDef NVIC_InitStructure;

#ifdef  VECT_TAB_RAM  
  /* Set the Vector Table base location at 0x20000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); 
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 */ 
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
#endif

//  /* enabling interrupt */
//  NVIC_InitStructure.NVIC_IRQChannel=USB_HP_CAN_TX_IRQChannel;//can發送中斷通道
//  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
//  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
//  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
//  NVIC_Init(&NVIC_InitStructure);
}

/*******************************************************************************
* Function Name  : CAN_Interrupt
* Description    : Configures the CAN and transmit,and receive by interruption
* Input          : None
* Output         : None
* Return         : PASSED if the reception is well done, FAILED in other case
*******************************************************************************/
TestStatus CAN_Interrupt(void)
{
  CAN_InitTypeDef        CAN_InitStructure;
  CAN_FilterInitTypeDef  CAN_FilterInitStructure;
  
  u16 i=0;
  u8 TransmitMailbox;//存儲發送數據后返回的郵箱編號

   /* CAN Periph clock enable */
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN, ENABLE);
    GPIO_PinRemapConfig(GPIO_Remap1_CAN,ENABLE);//端口重映射到PB8(Rx)及PB9(Tx)
  
  
  /* CAN register init */
  CAN_DeInit();
  CAN_StructInit(&CAN_InitStructure);

  /* CAN cell init */
  CAN_InitStructure.CAN_TTCM=DISABLE;
  CAN_InitStructure.CAN_ABOM=DISABLE; //ENABLE;
  CAN_InitStructure.CAN_AWUM=DISABLE;
  CAN_InitStructure.CAN_NART=DISABLE;
  CAN_InitStructure.CAN_RFLM=DISABLE;
  CAN_InitStructure.CAN_TXFP=DISABLE;
  CAN_InitStructure.CAN_Mode=CAN_Mode_Normal;
  CAN_InitStructure.CAN_SJW=CAN_SJW_1tq;
  CAN_InitStructure.CAN_BS1=CAN_BS1_10tq;
  CAN_InitStructure.CAN_BS2=CAN_BS2_7tq;
  CAN_InitStructure.CAN_Prescaler=4; //72MHz/2=36MHz=PCLK1 => PCLK1/4=9000KHz => 9000KHz / (1+10+7) => 500KHz
  CAN_Init(&CAN_InitStructure);

  /* CAN filter init */													  
  CAN_FilterInitStructure.CAN_FilterNumber=1;//選擇將要被初始化的過濾器,其值為0-13
  CAN_FilterInitStructure.CAN_FilterMode=CAN_FilterMode_IdMask;//選擇需要被初始化的模式:標識/屏蔽模式,或者標識列表模式(CAN_FilterMode_IdList)
  CAN_FilterInitStructure.CAN_FilterScale=CAN_FilterScale_32bit;//配置過濾器規模:一個32位或者2個16位
  CAN_FilterInitStructure.CAN_FilterIdHigh=0x0000;//選擇過濾器的標識號(對應一個32位(FxR0)配置的高16位 MSBs)
  CAN_FilterInitStructure.CAN_FilterIdLow=0x0000;//選擇過濾器的標識號(對應一個32位(FxR0)配置的低16位 LSBs)
  CAN_FilterInitStructure.CAN_FilterMaskIdHigh=0x0000;//根據模式用來選擇過濾器屏蔽號或者標識號(對應一個32位(FxR1)配置的高16位 MSBs)
  CAN_FilterInitStructure.CAN_FilterMaskIdLow=0x0000;//根據模式用來選擇過濾器屏蔽號或者標識號(對應一個32位(FxR1)配置的低16位 LSBs)
  CAN_FilterInitStructure.CAN_FilterFIFOAssignment=CAN_FIFO0;//分配FIFO 0給過濾器1
  CAN_FilterInitStructure.CAN_FilterActivation=ENABLE;//can過濾器激活
  CAN_FilterInit(&CAN_FilterInitStructure);//配置濾波器

  //CAN_ITConfig(CAN_IT_TME, ENABLE);//使能can 發送郵箱空中斷(屬于發送中斷的一種,詳見編程指導P271頁)

  /* transmit 1 message */
  TxMessage.StdId=0x0000;
  TxMessage.ExtId=0x0000;
  TxMessage.IDE=CAN_ID_STD;//使用標準標識號
  TxMessage.RTR=CAN_RTR_DATA;
  TxMessage.DLC=8;
  TxMessage.Data[0]=0x01;
  TxMessage.Data[1]=0x02;
  TxMessage.Data[2]=0x03;
  TxMessage.Data[3]=0x04;
  TxMessage.Data[4]=0x05;
  TxMessage.Data[5]=0x06;
  TxMessage.Data[6]=0x07;
  TxMessage.Data[7]=0x08;
  TransmitMailbox=CAN_Transmit(&TxMessage);

  /* initialize the value that will be returned */
  ret=0xFF;
       
  /* receive message with interrupt handling */
//  while((ret==0xFF)&&(i<0xffff))//當ret不等于255(表明中斷已經放生,ret的值在中斷服務函數中得以改變)或者當i增大到0xFF時,退出循環
//    {
//	 ret1=i;//記錄發生中斷時i的值
//	 i++;
//	 if(i==0x250)
//	 ret1=i;
//	}
  while((CAN_TransmitStatus(TransmitMailbox) != CANTXOK) && (i != 0xFF))
  {
    i++;
  }
  if (i==0xff)//如果是因為i增大到0xFFF而退出的循環,而不是因為ret值在中斷中得以改變而退出循環,則表示接收不成功,返回ret=0
  	ret=0;  

  /* disable interrupt handling */
 //CAN_ITConfig(CAN_IT_RQCP0, DISABLE);//發送失敗,關閉中斷
 

  return (TestStatus)ret;//返回ret,當ret為非零時,表示發送成功;若為0則表示發送失敗
}

#ifdef  DEBUG
/*******************************************************************************
* Function Name  : assert_failed
* Description    : Reports the name of the source file and the source line number
*                  where the assert error has occurred.
* Input          : - file: pointer to the source file name
*                  - line: assert error line source number
* Output         : None
* Return         : None
*******************************************************************************/
void assert_failed(u8* file, u32 line)
{ 
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif
/******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久久久久久久| 欧美人妇做爰xxxⅹ性高电影| 中文字幕av在线一区二区三区| 在线观看91视频| 99久久久久久| 成人综合在线观看| 国产成人精品一区二区三区四区 | 精品国产制服丝袜高跟| 精品视频123区在线观看| 欧美系列在线观看| 91精品一区二区三区在线观看| 欧美日韩一区二区三区四区| 国产精品久线在线观看| 国产精品不卡在线| 激情六月婷婷久久| 国产精品1区2区| 99国产精品久久久久| 精品国产一区二区三区久久久蜜月| 亚洲一区二区三区四区不卡| 亚洲最新视频在线观看| 亚洲国产欧美在线人成| 日本欧美一区二区在线观看| 久久97超碰国产精品超碰| 国产精品一区二区在线播放| 日韩午夜在线观看| 久久久久久久久久久久久夜| 国产精品久久久久久妇女6080| 精品综合免费视频观看| 欧美一级高清片| 日韩黄色一级片| 成人听书哪个软件好| 精品福利一区二区三区| 另类欧美日韩国产在线| av在线播放成人| 欧美精品高清视频| 欧美国产日韩在线观看| 国产精品一区二区不卡| 国产网站一区二区| 日韩激情中文字幕| 欧美一级日韩不卡播放免费| 国产精品美女久久久久aⅴ| 亚洲高清视频中文字幕| 欧美性受极品xxxx喷水| 午夜成人免费视频| 成人免费视频播放| 亚洲欧洲av在线| 另类小说图片综合网| 亚洲精品一区在线观看| 国产剧情一区在线| 国产精品不卡视频| 欧洲国内综合视频| 日本不卡在线视频| 国产欧美一区在线| 青娱乐精品视频在线| 91国产成人在线| 中文av字幕一区| 色吧成人激情小说| 日日夜夜精品视频免费| 久久天天做天天爱综合色| 亚洲一区国产视频| 欧美电影免费观看完整版| 亚洲国产一区二区视频| 日韩女优av电影| 成人免费毛片高清视频| 亚洲国产一区视频| 久久―日本道色综合久久| 91麻豆国产香蕉久久精品| 国产精品国产三级国产aⅴ原创| 91免费版pro下载短视频| 日韩精品免费视频人成| 久久男人中文字幕资源站| 色综合视频在线观看| 久久99国产乱子伦精品免费| 亚洲品质自拍视频网站| jiyouzz国产精品久久| 午夜精品久久久久| 久久久www免费人成精品| 日本高清不卡在线观看| 激情文学综合丁香| 亚洲福利一区二区三区| 中文一区一区三区高中清不卡| 欧美男人的天堂一二区| 不卡的av在线| 亚洲六月丁香色婷婷综合久久| 91麻豆6部合集magnet| 国产一区二区在线观看免费| 精品国产99国产精品| 91免费看`日韩一区二区| 国内精品免费在线观看| 亚洲18色成人| 精品日本一线二线三线不卡| 黄一区二区三区| 午夜日韩在线电影| 亚洲黄网站在线观看| 国产精品午夜在线| 精品成a人在线观看| 欧美美女黄视频| 在线观看一区日韩| 一本到一区二区三区| 成人伦理片在线| 国产精品中文字幕欧美| 久久99精品一区二区三区三区| 偷拍亚洲欧洲综合| 亚洲综合999| 亚洲麻豆国产自偷在线| 国产精品国产a| 中文成人av在线| 国产精品欧美久久久久一区二区| 精品国产三级电影在线观看| 精品日韩99亚洲| 亚洲精品一区在线观看| 久久人人爽人人爽| 久久久蜜臀国产一区二区| 精品精品国产高清a毛片牛牛 | 欧美成人乱码一区二区三区| 欧美日韩dvd在线观看| 欧美婷婷六月丁香综合色| 色哟哟一区二区| 91麻豆免费在线观看| 色久综合一二码| 欧美亚洲自拍偷拍| 欧美巨大另类极品videosbest | 国产精品亚洲一区二区三区妖精| 久久av资源站| 国产另类ts人妖一区二区| 国产成人精品影视| 91小视频在线观看| 在线观看免费亚洲| 69堂成人精品免费视频| 日韩一区二区三区免费看| 精品99一区二区| 国产人久久人人人人爽| 国产精品久久久久久久久动漫| 成人免费一区二区三区视频 | 美脚の诱脚舐め脚责91| 亚洲欧美激情一区二区| 亚洲一区免费观看| 久久精品噜噜噜成人88aⅴ| 国产在线精品不卡| 成人av免费观看| 色欧美片视频在线观看在线视频| 欧美日韩一区二区三区四区| 欧美岛国在线观看| 亚洲欧美综合网| 天堂va蜜桃一区二区三区| 韩国精品一区二区| 不卡一区在线观看| 91.xcao| 国产午夜精品一区二区三区视频| 国产精品国产三级国产aⅴ原创| 一区二区高清视频在线观看| 免费在线视频一区| 国产91精品一区二区| 国产一区二区三区四| 99久久精品一区| 日韩三级av在线播放| 国产精品家庭影院| 日韩电影免费一区| 不卡的电影网站| 日韩一级精品视频在线观看| 亚洲私人黄色宅男| 中文字幕在线不卡| 亚洲777理论| 99久久精品国产导航| 欧美一级精品在线| 怡红院av一区二区三区| 国产成人自拍高清视频在线免费播放| 欧美伊人久久大香线蕉综合69| 精品捆绑美女sm三区| 亚洲在线成人精品| 国产精品亚洲一区二区三区妖精| 精品视频1区2区3区| 国产精品视频一二三区| 午夜影院在线观看欧美| 成人一道本在线| 日韩一区二区三区在线| 亚洲国产成人高清精品| 国产成人av自拍| 日韩欧美国产一区二区三区| 玉米视频成人免费看| 成人福利在线看| 国产午夜精品福利| 麻豆91精品视频| 欧美日韩免费一区二区三区| 中文字幕一区三区| 国产一区啦啦啦在线观看| 欧美一区二区视频在线观看2022 | 成人一级片网址| 欧美videos中文字幕| 午夜精品久久久久久久 | 日韩一卡二卡三卡四卡| 亚洲一区二区在线观看视频 | 56国语精品自产拍在线观看| 一区二区三区免费观看| 91亚洲精品一区二区乱码| 国产精品久久久久久久久免费樱桃 | 美国欧美日韩国产在线播放| 欧美日韩高清一区二区不卡| 亚洲综合在线电影| 一本一本大道香蕉久在线精品|