久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9694|回復: 20
收起左側

基于STM32F103平臺CANOPEN工業協議源碼

  [復制鏈接]
ID:96552 發表于 2018-7-26 20:22 | 顯示全部樓層 |閱讀模式
基于STM32F103平臺CANOPEN工業協議,性價比非常的方案,工業產品必備

單片機源程序如下:
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "stm32f10x.h"
  3. #include "delay.h"
  4. #include "can.h"
  5. #include "mco.h"
  6. #include "lcd.h"
  7. #include "bsp.h"
  8. #include "i2c.h"
  9. #include "24cxx.h"
  10. #include "stdio.h"

  11. typedef struct
  12. {
  13.   u8 BaudRate_Data;
  14.   u8 ODNodeID_Data;
  15. }e2prom;
  16. e2prom Image;
  17. #define SIZE sizeof(Image)

  18. void RCC_Configuration(void);
  19. void GPIO_Configuration(void);
  20. void NVIC_Configuration(void);
  21. void SYS_Tick_Configuration(void);
  22. void Set_Task(void);

  23. u32 *pDataIn,*pDataIna;
  24. u32  Datain,Dataina;
  25. u8   Key0_Flag=RESET;
  26. u8   Set_Flag=0;
  27. u8   KeyUp_Flag=RESET;
  28. u8   Baud_Data=0x01;
  29. u16 setData=0x45;
  30. extern OD_TABLE OD[MAX_OD_SIZE];
  31. extern WORD volatile gTimCnt;
  32. extern BYTE ODNodeID;

  33. int main(void)
  34. {
  35.   RCC_Configuration();
  36.   GPIO_Configuration();
  37.   delay_init();
  38.   LCD_Init();
  39.   LCD_Fill(0,0,239,319,BRED);
  40.   POINT_COLOR=RED;       //點的顏色
  41.   LCD_ShowString(30,50,200,16,16,"zhanjian STM32 ^_^");
  42.   LCD_ShowString(30,70,200,16,16,"CAN TEST");
  43.   LCD_ShowString(30,90,200,16,16,"wang xiao xin zhi zuo");
  44.   LCD_ShowString(30,110,200,16,16,"2014/03/24");
  45.   LCD_ShowString(60,130,200,16,16,"Datain:");  //8*7=56+8=64
  46.   LCD_ShowString(60,150,200,16,16,"Datain:");  //8*7=56+8=64
  47.   LCD_ShowString(60,170,200,16,16,"BaudRate:");//8*9=72+8=80
  48.   LCD_ShowString(60,190,200,16,16,"ODNodeID:");
  49.   /**讀出e2prom值,在Set_Task()中判斷是否要從新設置波特率和ID**/
  50.   while(AT24CXX_Check());//核查波特率和ID在不在范圍內
  51.   AT24CXX_Read(0,(u8*)&Image,SIZE);//讀取e2prom
  52.   ODNodeID=Image.ODNodeID_Data;
  53.   Baud_Data=Image.BaudRate_Data;
  54.   SYS_Tick_Configuration();
  55.   NVIC_Configuration();
  56.   CAN_Configration(Baud_Data);
  57.   MCOUSER_ResetCommunication();
  58.   OD[83].Val = setData;
  59.   pDataIn = &OD[MCO_Search_ODTABLE(0x6001,0x02)].Val;
  60.   while (1)
  61.   {
  62.     pDataIna=&OD[MCO_Search_ODTABLE(0x2002,0x03)].Val;
  63.     if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==SET)
  64.     {
  65.       if(KeyUp_Flag==RESET)
  66.       {
  67.         KeyUp_Flag=SET;
  68.         Set_Task();
  69.       }
  70.     }
  71.     else{ KeyUp_Flag=RESET;}
  72.     Ctx();
  73.     Datain = *pDataIn;
  74.     Dataina = *pDataIna;
  75.     LCD_ShowxNum(124,130,Datain,4,16,0);           //顯示Datain的值
  76.     LCD_ShowxNum(124,150,Dataina,4,16,0);           //顯示Datain的值
  77.     LCD_ShowxNum(140,170,Baud_Data,4,16,0);        //顯示BaudRate的值
  78.     LCD_ShowxNum(140,190,ODNodeID,4,16,0);         //顯示ODNodeID的值
  79.   }
  80. }

  81. /****************************************************************************
  82. * 名稱:RCC_Configuration()
  83. * 功能:設置系統時鐘,使能使用的時鐘
  84. * 入口參數:無
  85. * 出口參數:無
  86. ****************************************************************************/
  87. void RCC_Configuration(void)
  88. {
  89.   SystemInit();
  90.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  91.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  92.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE);
  93.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1,ENABLE);
  94.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
  95. }

  96. /*******************************************************************************
  97. *函數名稱:void SYS_Tick_Configuration(void)
  98. *函數功能:系統滴答時鐘的配置
  99. *入口參數:無
  100. *出口參數:無
  101. *******************************************************************************/
  102. void SYS_Tick_Configuration(void)
  103. {
  104.   SysTick->CTRL &= (u32)0xFFFFFFFE;   //失能系統滴答計數器        
  105.   SysTick->CTRL &= (u32)0xFFFFFFFD;   //失能中斷
  106.   SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//設置時鐘為9M
  107.   SysTick->LOAD = 9000;               //設置重新裝載值
  108.   SysTick->CTRL |= (u32)0x00000001;   //使能系統滴答時鐘
  109.   SysTick->CTRL |= (u32)0x00000002;   //使能中斷
  110. }
  111. /****************************************************************************
  112. * 名稱:GPIO_Configuration(void)
  113. * 功能:配置引腳
  114. * 入口參數:無
  115. * 出口參數:無
  116. ****************************************************************************/
  117. void GPIO_Configuration(void)
  118. {
  119.   GPIO_InitTypeDef GPIO_InitStructure;
  120.   //CAN  I/O初始化
  121.   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;//RX
  122.   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  123.   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
  124.   GPIO_Init(GPIOA,&GPIO_InitStructure);
  125.   
  126.   GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;//TX
  127.   GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  128.   GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
  129.   GPIO_Init(GPIOA,&GPIO_InitStructure);
  130.   //LED I/O初始化
  131.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  132.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  133.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  134.   GPIO_Init(GPIOB,&GPIO_InitStructure);
  135.   GPIO_SetBits(GPIOB,GPIO_Pin_5);
  136.    
  137.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
  138.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  139.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  140.   GPIO_Init(GPIOE,&GPIO_InitStructure);
  141.   GPIO_SetBits(GPIOE,GPIO_Pin_5);
  142.   //KEY I/O初始化
  143.   GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
  144.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  145.   GPIO_Init(GPIOE, &GPIO_InitStructure);
  146.   
  147.   GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;
  148.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
  149.   GPIO_Init(GPIOA, &GPIO_InitStructure);
  150.   //IIC I/O初始化
  151.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11;
  152.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ;   //推挽輸出
  153.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  154.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  155.   GPIO_SetBits(GPIOB,GPIO_Pin_10|GPIO_Pin_11);         //PB10,PB11 輸出高
  156. }


  157. /****************************************************************************
  158. * 名稱:NVIC_Configuration(void)
  159. * 功能:設置中斷優先級
  160. * 入口參數:無
  161. * 出口參數:無
  162. ****************************************************************************/
  163. void NVIC_Configuration(void)
  164. {
  165.   NVIC_InitTypeDef NVIC_InitStructure;
  166.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

  167.   NVIC_SetPriority (SysTick_IRQn, 0);
  168.   
  169.   NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
  170.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
  171.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  172.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  173.   NVIC_Init(&NVIC_InitStructure);
  174. }

  175. /****************************************************************************
  176. * 名稱:void SysTickHandler(void)
  177. * 功能:滴答定時器服務程序
  178. * 入口參數:無
  179. * 出口參數:無
  180. ****************************************************************************/
  181. void SysTick_Handler(void)
  182. {
  183.   gTimCnt++;
  184. }

  185. /****************************************************************************
  186. * 名稱:void Set_Task(void)
  187. * 功能:設置波特率和ID號
  188. * 入口參數:無
  189. * 出口參數:無
  190. ****************************************************************************/
  191. void Set_Task(void)
  192. {
  193.   while(1)
  194.     {
  195.       if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)==RESET)//key0按下
  196.       {
  197.         if(Key0_Flag==RESET)
  198.         {
  199.             Key0_Flag=SET;
  200.             Set_Flag++;
  201.             //if(Set_Flag==4) Set_Flag=0;
  202.         }
  203.       }
  204.       else Key0_Flag=RESET;
  205.       if(Set_Flag==1)//設置ODNodeID
  206.       {
  207.         Key_ReceiveODNodeID();
  208.       }
  209.       if(Set_Flag==2)//設置BaudRate
  210.       {
  211.         //CAN_Configration(Key_ReceiveBaudRate());
  212.         Baud_Data = Key_ReceiveBaudRate();
  213.       }
  214.       if(Set_Flag==3)//確定設置
  215.       {
  216.         Set_Flag=0;
  217.         Image.ODNodeID_Data = ODNodeID;
  218.         Image.BaudRate_Data = Baud_Data;
  219.         AT24CXX_Write(0,(u8*)&Image,SIZE);//寫入e2prom
  220.         SYS_Tick_Configuration();
  221.         NVIC_Configuration();
  222.         CAN_Configration(Baud_Data);
  223.         MCOUSER_ResetCommunication();
  224.         pDataIn = &OD[MCO_Search_ODTABLE(0x6001,0x02)].Val;
  225.         break;
  226.       }
  227.     LCD_ShowxNum(140,150,Baud_Data,4,16,0); //顯示BaudRate的值
  228.     LCD_ShowxNum(140,170,ODNodeID,4,16,0);         //顯示ODNodeID的值
  229.     }
  230. }
復制代碼

這個代碼有什么問題嗎?求指導,測試了延時器文件,整個工程都工作不了
CANopen test.7z (2.65 MB, 下載次數: 463)

回復

使用道具 舉報

ID:102263 發表于 2018-11-9 15:39 | 顯示全部樓層
謝謝分享~~~
回復

使用道具 舉報

ID:111291 發表于 2019-4-15 17:39 | 顯示全部樓層
學習學習,謝謝分享!
回復

使用道具 舉報

ID:554945 發表于 2019-6-4 18:35 | 顯示全部樓層

學習學習,謝謝分享!
回復

使用道具 舉報

ID:285890 發表于 2019-6-8 21:02 | 顯示全部樓層
非常感謝分享!!
回復

使用道具 舉報

ID:486587 發表于 2019-6-17 02:52 | 顯示全部樓層
學習學習,謝謝分享!
回復

使用道具 舉報

ID:164385 發表于 2019-6-17 08:08 | 顯示全部樓層
謝謝樓主的分享了~~~
回復

使用道具 舉報

ID:564716 發表于 2019-6-17 16:11 | 顯示全部樓層
學習了,謝謝大佬分享
回復

使用道具 舉報

ID:66768 發表于 2019-8-29 10:24 | 顯示全部樓層
感謝樓主分享!
回復

使用道具 舉報

ID:369933 發表于 2019-9-25 11:14 | 顯示全部樓層
感謝分享。。。。
回復

使用道具 舉報

ID:622848 發表于 2019-10-12 14:02 | 顯示全部樓層
感謝樓主分享
回復

使用道具 舉報

ID:481976 發表于 2019-10-16 17:02 | 顯示全部樓層

感謝分享。。。。
回復

使用道具 舉報

ID:628323 發表于 2019-10-22 17:05 | 顯示全部樓層
感謝分享,使用后再來交流交流
回復

使用道具 舉報

ID:660659 發表于 2019-12-10 15:39 | 顯示全部樓層
請問這個協議實現是完整的嗎?
回復

使用道具 舉報

ID:309119 發表于 2020-1-20 10:14 | 顯示全部樓層
謝謝樓主分享,正好需要
回復

使用道具 舉報

ID:710761 發表于 2020-3-18 13:45 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

ID:570527 發表于 2020-3-28 10:22 | 顯示全部樓層
謝謝分享!!!!!!!!
回復

使用道具 舉報

ID:385734 發表于 2020-6-24 19:01 | 顯示全部樓層
感謝分享!找了好久了
回復

使用道具 舉報

ID:416258 發表于 2021-3-5 18:10 | 顯示全部樓層
感謝樓主分享,正好需要學習學習
回復

使用道具 舉報

ID:381245 發表于 2021-3-7 14:14 | 顯示全部樓層
請問這個協議實現是完整的嗎?學習學習
回復

使用道具 舉報

ID:301191 發表于 2022-4-12 03:57 | 顯示全部樓層
頂一下
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久综合一区二区三区 | 午夜亚洲| 涩涩99 | 亚洲精品久久久久中文字幕二区 | 久久精品视频一区二区三区 | 精品久久精品 | 中文字字幕在线中文乱码范文 | 欧美一级大片 | 精品久久久久一区二区国产 | 天天干,夜夜操 | 国产精品高潮呻吟久久 | 成年人在线视频 | 亚洲一区二区三区视频 | 欧美三级在线 | 黑色丝袜三级在线播放 | 美国一级黄色片 | 九九亚洲精品 | 国外成人在线视频 | 日日射影院| 日韩欧美一区二区三区免费观看 | 国产一区二区三区在线 | 日本大片在线播放 | 日韩在线视频一区二区三区 | 久久九精品 | 欧美日本亚洲 | 成人免费视频网站在线看 | 色资源在线 | 一本色道精品久久一区二区三区 | 免费高清av| 国产精品美女久久久久aⅴ国产馆 | 人人射人人草 | 视频二区国产 | 欧美美女被c | 成人精品一区二区三区 | 精品国产精品一区二区夜夜嗨 | 亚洲视频一区在线观看 | 精品国产乱码久久久久久蜜柚 | 国产成人免费视频 | 一级高清免费毛片 | 日韩欧美电影在线 | 91麻豆精品国产91久久久久久 |