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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5948|回復: 1
打印 上一主題 下一主題
收起左側

STM32學習--讀寫X5043程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:81272 發表于 2015-5-27 17:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
完整程序源代碼工程文件下載地址: 讀寫X5043.RAR (236.13 KB, 下載次數: 50)

  1. /*******************************************************************************

  2. title        :         X5043.C

  3. device        :        XICOR 512*8bit Programmable Watchdog Supervisory E2PROM
  4. author        :        szlihongtao
  5. date        :        2010-08-25
  6. version        :        1.0
  7. note        :        X25045 驅動程序
  8. *******************************************************************************/
  9. #include         "stm32f10x.h"
  10. #include         "stm32_m.h"
  11. #include    "x5043.h"
  12. //******************************************************************************
  13. static void delay1uS(void)
  14. {
  15.         INT8U i;

  16.         for(i=0;i<36;++i);
  17. }
  18. //*****************************************************************************
  19. static void set_sck(void)
  20. {
  21.         GPIO_SetBits(GPIOC, GPIO_Pin_7);
  22.         delay1uS();
  23. }
  24. //*****************************************************************************
  25. static void clr_sck(void)
  26. {
  27.         GPIO_ResetBits(GPIOC, GPIO_Pin_7);
  28.         delay1uS();
  29. }
  30. //*****************************************************************************
  31. static void set_wp(void)
  32. {
  33.         delay1uS();
  34. }
  35. //*****************************************************************************
  36. static void clr_wp(void)
  37. {
  38.         delay1uS();
  39. }
  40. //*****************************************************************************
  41. static void set_cs(void)
  42. {
  43.         GPIO_SetBits(GPIOC, GPIO_Pin_4);
  44.         delay1uS();
  45. }
  46. //*****************************************************************************
  47. static void clr_cs(void)
  48. {
  49.         GPIO_ResetBits(GPIOC, GPIO_Pin_4);
  50.         delay1uS();
  51. }
  52. //*****************************************************************************
  53. static void set_si(void)
  54. {
  55.         GPIO_SetBits(GPIOC, GPIO_Pin_6);
  56.         delay1uS();
  57. }
  58. //*****************************************************************************
  59. static void clr_si(void)   
  60. {
  61.         GPIO_ResetBits(GPIOC, GPIO_Pin_6);
  62.         delay1uS();
  63. }
  64. //*****************************************************************************
  65. static INT8U get_so_x5043(void)
  66. {
  67.         return (GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6));
  68. }
  69. //*****************************************************************************
  70. static void set_sio_input(void)
  71. {
  72.         GPIO_InitTypeDef GPIO_InitStructure;

  73.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  74.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  75.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  76.           GPIO_Init(GPIOC, &GPIO_InitStructure);

  77.         delay1uS();
  78. }
  79. //*****************************************************************************
  80. static void set_sio_output(void)
  81. {
  82.         GPIO_InitTypeDef GPIO_InitStructure;

  83.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  84.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  85.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  86.           GPIO_Init(GPIOC, &GPIO_InitStructure);

  87.         delay1uS();
  88. }
  89. //******************************************************************************
  90. /*25045操作子程序集*/
  91. /*;*****************************************************************************
  92. *
  93. ;* Name: RST_WDOG
  94. ;* Description: Reset Watchdog Timer
  95. ;* Function: This routine resets the watchdog timer without sending a command
  96. ;* Calls: None
  97. ;* Input: None
  98. ;* Outputs: None
  99. ;* Register Usage: None
  100. ;*******************************************************************************
  101. */
  102. /*復位DOG*/
  103. void rst_wdog (void)
  104. {
  105.         clr_cs();
  106.         set_cs();
  107. }
  108. //******************************************************************************
  109. //上電以后,在對25045操作之前必須執行本子程序一次
  110. //******************************************************************************
  111. static void x25045_start(void)
  112. {
  113.         set_cs();
  114.         clr_cs();
  115.         set_cs();
  116. }
  117. /*;*****************************************************************************
  118. ;*
  119. ;* Name: OUTBYT
  120. ;* Description: Sends byte to EEPROM
  121. ;* Function: This routine shifts out a byte, starting with the MSB, to the EEPROM
  122. ;* Calls: None
  123. ;* Input: A = byte to be sent
  124. ;* Outputs: None
  125. ;* Register Usage: R0, A
  126. ;*******************************************************************************
  127. */
  128. /* 輸出一個數據到25045,此數據可能為地址,先導字,寫入的數據等*/
  129. // data_write(INT8U aa)
  130. //*****************************************************************************
  131. static void outbyt(INT8U data_wr)
  132. {
  133.         INT8U i;

  134.         set_sio_output();
  135.         for (i=0;i<8;++i)
  136.         {
  137.                 clr_sck();
  138.                                                         // SI=(aa&0x80);
  139.                 if (data_wr&0x80)
  140.                         set_si();
  141.                 else
  142.                         clr_si();
  143.                 set_sck();
  144.                 data_wr <<= 1;
  145.         }
  146.         clr_si();                                        /*使SI處于確定的狀態*/
  147. }
  148. /*;****************************************************************************
  149. *
  150. ;* Name: INPUTBYT
  151. ;* Description: Recieves byte from EEPROM
  152. ;* Function: This routine recieves a byte, MSB first, from the EEPROM
  153. ;* Calls: None
  154. ;* Input: None
  155. ;* Outputs: A = recieved byte
  156. ;* Register Usage: R0, A
  157. ;******************************************************************************
  158. */
  159. /*得到一個數據,此數據可能為狀態寄存器數據,讀出的單元數據等*/
  160. // data_read
  161. //*****************************************************************************
  162. static INT8U inputbyt(void)
  163. {
  164.         INT8U temp,i;
  165.        
  166.         temp=0;
  167.         set_sio_input();
  168.         for (i=0;i<8;++i)
  169.         {
  170.                 temp<<=1;
  171.                 set_sck();
  172.                 clr_sck();
  173.                 if (get_so_x5043())
  174.                          temp |=0x1;
  175.         }
  176.         return (temp);
  177. }
  178. /*;***************************************************************************
  179. *
  180. ;* Name: RDSR_CMD
  181. ;* Description: Read Status Register
  182. ;* Function: This routine sends the command to read the status register
  183. ;* Calls: outbyt, inputbyt
  184. ;* Input: None
  185. ;* Outputs: A = status registerXicor Application Note AN21
  186. ;* Register Usage: A
  187. ;****************************************************************************
  188. */
  189. /*讀狀態寄存器,讀出的數據放入到data_rd中*/
  190. //*****************************************************************************
  191. INT8U rdsr_cmd (void)
  192. {
  193.         INT8U data_rd;

  194.         clr_cs();
  195.         clr_sck();
  196.         outbyt(RDSR_INST);
  197.         data_rd=inputbyt();
  198.         clr_sck();
  199.         set_cs();
  200.        
  201.         return (data_rd);
  202. }
  203. /*;***************************************************************************
  204. *
  205. ;* Name: WIP_POLL
  206. ;* Description: Write-In-Progress Polling
  207. ;* Function: This routine polls for completion of a nonvolatile write cycle by examining the
  208. ;* WIP bit of the status register
  209. ;* Calls: rdsr_cmdXicor Application Note AN21
  210. ;* Input: None
  211. ;* Outputs: None
  212. ;* Register Usage: R1, A
  213. ;*****************************************************************************
  214. */
  215. /*檢測寫入的過程是否結束*/
  216. //*****************************************************************************
  217. static void wip_poll(void)
  218. {
  219.         INT8U status1,cnt;
  220.        
  221.         for (cnt=0;cnt<MAX_POLL;++cnt)
  222.         {
  223.                 delay1uS();
  224.                 status1=rdsr_cmd();
  225.                 if ((status1&0x01)==0)
  226.                         break;
  227.         }
  228. }
  229. /*;***************************************************************************
  230. *
  231. ;* Name: WRSR_CMD
  232. ;* Description: Write Status Register
  233. ;* Function: This routine sends the command to write the WD0, WD1, BP0 and BP0 EEPROM
  234. ;* bits in the status register
  235. ;* Calls: outbyt, wip_poll
  236. ;* Input: None
  237. ;* Outputs: None
  238. ;* Register Usage: A
  239. ;*****************************************************************************
  240. */
  241. /*寫狀態寄存器子程序
  242. 用于設置看門狗時間,區塊保護等
  243. */
  244. //*****************************************************************************
  245. void wrsr_cmd(void)
  246. {
  247.         x25045_start();
  248.         wren_cmd();

  249.         clr_sck();                                /* Bring SCK low */
  250.         clr_cs();                                /* Bring /CS low */

  251.         outbyt(WRSR_INST) ;                /* Send WRSR instruction */
  252.         outbyt(STATUS_REG);                /* Send status register */
  253.         clr_sck();                                /* Bring SCK low */
  254.         set_cs();                                /* Bring /CS high */
  255.         wip_poll();                                /* Poll for completion of write cycle */
  256.         wrdi_cmd();
  257.        
  258.         return;
  259. }
  260. /*;****************************************************************************
  261. *
  262. ;* Name: BYTE_WRITE
  263. ;* Description: Single Byte Write
  264. ;* Function: This routine sends the command to write a single byte to the EEPROM memory
  265. array
  266. ;* Calls: outbyt, wip_poll
  267. ;* Input: None
  268. ;* Outputs: None
  269. ;* Register Usage: A, B
  270. ;******************************************************************************
  271. */
  272. /*字節寫入,ee_data為寫入的數據,address為寫入的地址,對于25045而言為000-1FF*/
  273. /*
  274. Write Enable Latch
  275. The X25043/45 contains a “write enable” latch. This
  276. latch must be SET before a write operation will be
  277. completed internally. The WREN instruction will set the
  278. latch and the WRDI instruction will reset the latch. This
  279. latch is automatically reset upon a power-up condition
  280. and after the completion of a byte, page, or status
  281. register write cycle. The latch is also reset if WP is
  282. brought LOW.
  283. 字節,頁面,狀態字寫周期結束后,自動會禁止寫操作
  284. */
  285. //*****************************************************************************
  286. void byte_write(INT16U address,INT8U ee_data)
  287. {
  288.         INT8U temp;
  289.        
  290.         wren_cmd();

  291.         set_wp();
  292.         clr_sck();
  293.         clr_cs();
  294.         temp=(INT8U)((address&0x0100)>>5);

  295.         temp=temp|WRITE_INST;
  296.         outbyt(temp);                        /* Send WRITE instruction including MSB of address */
  297.                                                         /*將高位地址左移3位與寫入先導字相或,得到正確的先導字寫入25045*/
  298.         temp=address&0xff;
  299.         outbyt(temp);                        /*輸出低位地址到25045*/
  300.         outbyt(ee_data);                 /*寫入數據到25045的對應單元*/
  301.         clr_sck();
  302.         set_cs();
  303.         wip_poll();                                 /*檢測是否寫完*/

  304.         clr_wp();       
  305.         wrdi_cmd();

  306.         return;
  307. }
  308. /*;****************************************************************************

  309. ;* Name: BYTE_READ
  310. ;* Description: Single Byte Read
  311. ;* Function: This routine sends the command to read a single byte from the EEPROM memory
  312. array
  313. ;* Calls: outbyt, inputbyt
  314. ;* Input: None
  315. ;* Outputs: A = read byte
  316. ;* Register Usage: A, BXicor Application Note AN21
  317. ;******************************************************************************
  318. */
  319. /*字節讀出,其中dd為讀出的地址,返回的值為讀出的數據*/
  320. //*****************************************************************************
  321. INT8U byte_read(INT16U addr)
  322. {
  323.         INT8U temp;
  324.        
  325.         clr_sck();
  326.         clr_cs();
  327.         temp=(INT8U)((addr&0x0100)>>5);
  328.         temp=temp|READ_INST;
  329.         outbyt(temp);                        /* Send READ_INST instruction including MSB of address */
  330.                                                         /*將高位地址左移3位與讀出先導字相或,得到正確的先導字寫入25045*/
  331.         temp=addr&0xff;
  332.         outbyt(temp);                    /*輸出低位地址到25045*/
  333.         temp=inputbyt();                /*得到讀出的數據*/
  334.         clr_sck();
  335.         set_cs();
  336.        
  337.         return (temp);
  338. }
  339. //*****************************************************************************
  340. // 連續讀多個字節
  341. //*****************************************************************************
  342. void byte_read_sequence(INT16U addr,INT8U arr[],INT16U length)
  343. {
  344.         INT8U temp;
  345.         INT16U i;
  346.        
  347.         clr_sck();
  348.         clr_cs();
  349.         temp=(INT8U)((addr&0x0100)>>5);
  350.         temp=temp|READ_INST;
  351.         outbyt(temp);                        /* Send READ_INST instruction including MSB of address */
  352.                                                         /*將高位地址左移3位與讀出先導字相或,得到正確的先導字寫入25045*/
  353.         temp=addr&0xff;
  354.         outbyt(temp);                    /*輸出低位地址到25045*/

  355.         length&=512-1;
  356.         for(i=0;i<length;++i)
  357.                 arr[i]=inputbyt();        /*得到讀出的數據*/
  358.        
  359.         clr_sck();
  360.         set_cs();
  361.        
  362.         return;
  363. }
  364. /*****************************************************************************
  365. *
  366. ;* Name: WREN_CMD
  367. ;* Description: Set write enable latch
  368. ;* Function: This routine sends the command to enable writes to the EEPROM memory array or
  369. ;* status register
  370. ;* Calls: outbyt
  371. ;* Input: None
  372. ;* Outputs: None
  373. ;* Register Usage: A
  374. ;******************************************************************************
  375. */
  376. //*****************************************************************************
  377. // 允許寫入數據到X5043
  378. // 寫使能子程序
  379. //*****************************************************************************
  380. void wren_cmd(void)
  381. {
  382.         set_wp();
  383.         clr_sck();                                /* Bring SCK low */
  384.         clr_cs();                                /* Bring /CS low */

  385.         outbyt(WREN_INST);                /* Send WREN instruction */
  386.         clr_sck();                                /* Bring SCK low */
  387.         set_cs();                                /* Bring /CS high */

  388.         clr_wp();
  389.         return;
  390. }
  391. //*****************************************************************************
  392. // 禁止寫入數據到X5043
  393. //*****************************************************************************
  394. void wrdi_cmd(void)
  395. {
  396.         set_wp();
  397.         clr_sck();                                /* Bring SCK low */
  398.         clr_cs();                                /* Bring /CS low */

  399.         outbyt(WRDI_INST);                /* Send WRDI_INST instruction */
  400.         clr_sck();                                /* Bring SCK low */
  401.         set_cs();                                /* Bring /CS high */
  402.         clr_wp();
  403.         return;
  404. }
  405. //*****************************************************************************
  406. #if 1
  407. #define BASE_ADDR   10
  408. INT8U i,arr[8];
  409. void test_x5043(void)
  410. {
  411.         wrsr_cmd();
  412.         i=rdsr_cmd();

  413.         for(i=0;i<8;++i) arr[i]=0;

  414.         for(i=0;i<8;++i)
  415.                 arr[i]=x5043_rd(i+BASE_ADDR);
  416. //----------------------------------------
  417.         for(i=0;i<8;++i)
  418.                 x5043_wr(i+BASE_ADDR,6*i);

  419.         for(i=0;i<8;++i) arr[i]=0;

  420.         for(i=0;i<8;++i)
  421.                 arr[i]=x5043_rd(i+BASE_ADDR);

  422.         for(i=0;i<8;++i) arr[i]=0;
  423.         byte_read_sequence(BASE_ADDR,arr,8);
  424. //----------------------------------------
  425.         x5043_wr(2+BASE_ADDR,17);

  426.         for(i=0;i<8;++i)
  427.                 arr[i]=0;

  428.         for(i=0;i<8;++i)
  429.                 arr[i]=x5043_rd(i+BASE_ADDR);

  430.         delay1uS();
  431. }
  432. #endif
  433. //*****************************************************************************
  434. //*************************    END   ******************************************
  435. //*****************************************************************************
  436. \032
復制代碼



  1. /*******************************************************************************

  2. STM32學習日志(202)----讀寫X5043

  3. 編譯環境:        EWARM V5.30
  4. 硬件環境:51hei
  5. STM32 FW:   V3.0.0
  6. 作者        :        szlihongtao
  7. 時間        :          2017-08-25
  8. *******************************************************************************/
  9. /**
  10.   ******************************************************************************
  11.   * @file    Project/Template/main.c
  12.   * @author  MCD Application Team
  13.   * @version V3.0.0
  14.   * @date    04/06/2009
  15.   * @brief   Main program body
  16.   ******************************************************************************
  17.   * @copy
  18.   *
  19.   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  20.   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
  21.   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
  22.   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
  23.   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
  24.   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  25.   *
  26.   * <h2><center>© COPYRIGHT 2009 STMicroelectronics</center></h2>
  27.   */

  28. /* Includes ------------------------------------------------------------------*/
  29. #include "stm32f10x.h"
  30. #include "stm32_m.h"
  31. //******************************************************************************
  32. static void delayms(INT16U cnt)
  33. {
  34.         INT16U i;

  35.         while(cnt--)
  36.                 for (i=0; i<7333; i++);
  37. }
  38. //******************************************************************************
  39. // 時鐘設置初始化
  40. //******************************************************************************
  41. static void RCC_Configuration(void)
  42. {
  43.   ErrorStatus HSEStartUpStatus;
  44. /*
  45. RCC_AdjustHSICalibrationValue 調整內部高速晶振(HSI)校準值
  46. RCC_ITConfig 使能或者失能指定的RCC中斷
  47. RCC_ClearFlag 清除RCC的復位標志位
  48. RCC_GetITStatus 檢查指定的RCC中斷發生與否
  49. RCC_ClearITPendingBit 清除RCC的中斷待處理位
  50. */
  51.           /* RCC system reset(for debug purpose) */
  52.           // 時鐘系統復位
  53.           RCC_DeInit();

  54.         // 使能外部的8M晶振
  55.         // 設置外部高速晶振(HSE)
  56.           /* Enable HSE */
  57.           RCC_HSEConfig(RCC_HSE_ON);

  58.         // 使能或者失能內部高速晶振(HSI)
  59.         RCC_HSICmd(DISABLE);

  60.         // 等待HSE起振
  61.         // 該函數將等待直到HSE就緒,或者在超時的情況下退出
  62.           /* Wait till HSE is ready */
  63.           HSEStartUpStatus = RCC_WaitForHSEStartUp();

  64.           if(HSEStartUpStatus == SUCCESS)
  65.           {
  66.             /* HCLK = SYSCLK */
  67.                 // 設置AHB時鐘(HCLK)
  68.             RCC_HCLKConfig(RCC_SYSCLK_Div1);        // 72 MHz

  69.             /* PCLK1 = HCLK/2 */
  70.                 // 設置低速AHB時鐘(PCLK1)
  71.             RCC_PCLK1Config(RCC_HCLK_Div2);        // 36 MHz

  72.             /* PCLK2 = HCLK */
  73.                 // 設置高速AHB時鐘(PCLK2)
  74.             RCC_PCLK2Config(RCC_HCLK_Div1);        // 72 MHz

  75.             /* ADCCLK = PCLK2/8 */
  76.                 // 設置ADC時鐘(ADCCLK)
  77.                    RCC_ADCCLKConfig(RCC_PCLK2_Div8);

  78.                 // 設置USB時鐘(USBCLK)
  79.                 // USB時鐘 = PLL時鐘除以1.5
  80.                 RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);

  81.                 // 設置外部低速晶振(LSE)
  82.                 RCC_LSEConfig(RCC_LSE_OFF);

  83.                 // 使能或者失能內部低速晶振(LSI)
  84.                 // LSE晶振OFF
  85.                 RCC_LSICmd(DISABLE);

  86.                 // 設置RTC時鐘(RTCCLK)
  87.                 // 選擇HSE時鐘頻率除以128作為RTC時鐘
  88.                 RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div128);

  89.                 // 使能或者失能RTC時鐘
  90.                 // RTC時鐘的新狀態
  91.                 RCC_RTCCLKCmd(DISABLE);

  92.             /* Flash 2 wait state */
  93.             FLASH_SetLatency(FLASH_Latency_2);

  94.             /* Enable Prefetch Buffer */
  95.             FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

  96.             /* PLLCLK = 8MHz * 9 = 72 MHz */
  97.                 // 設置PLL時鐘源及倍頻系數
  98.             RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

  99.             /* Enable PLL */
  100.                 // 使能或者失能PLL
  101.             RCC_PLLCmd(ENABLE);

  102.             /* Wait till PLL is ready */
  103.                 // 檢查指定的RCC標志位設置與否
  104.             while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
  105.             {
  106.             }

  107.             /* Select PLL as system clock source */
  108.                 // 設置系統時鐘(SYSCLK)
  109.             RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

  110.             /* Wait till PLL is used as system clock source */
  111.                 // 返回用作系統時鐘的時鐘源
  112.             while(RCC_GetSYSCLKSource() != 0x08)
  113.             {
  114.             }
  115.   }

  116.         // 使能或者失能AHB外設時鐘
  117.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1
  118.                                                         |RCC_AHBPeriph_DMA2
  119.                                                         |RCC_AHBPeriph_SRAM
  120.                                                         |RCC_AHBPeriph_FLITF
  121.                                                         |RCC_AHBPeriph_CRC
  122.                                                         |RCC_AHBPeriph_FSMC
  123.                                                         |RCC_AHBPeriph_SDIO,DISABLE);
  124.         // 使能或者失能APB1外設時鐘
  125.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_ALL,DISABLE);

  126.         // 強制或者釋放高速APB(APB2)外設復位
  127.         RCC_APB2PeriphResetCmd(RCC_APB2Periph_ALL,ENABLE);
  128.         // 退出復位狀態
  129.         RCC_APB2PeriphResetCmd(RCC_APB2Periph_ALL,DISABLE);

  130.         // 強制或者釋放低速APB(APB1)外設復位
  131.         RCC_APB1PeriphResetCmd(RCC_APB1Periph_ALL,ENABLE);

  132.         // 強制或者釋放后備域復位
  133.         RCC_BackupResetCmd(ENABLE);

  134.         // 使能或者失能時鐘安全系統
  135.         RCC_ClockSecuritySystemCmd(DISABLE);
  136. }
  137. //******************************************************************************
  138. // NVIC設置
  139. //******************************************************************************
  140. static void NVIC_Configuration(void)
  141. {
  142. }
  143. //******************************************************************************
  144. // SysTick設置初始化
  145. //******************************************************************************
  146. static void SysTick_Config1(void)
  147. {
  148.         #define SystemFreq                72000000.0        // 單位為Hz
  149.         #define TB_SysTick                100000.0                // 單位為uS,與示波器實測一致

  150.         INT32U ticks;

  151.         ticks=(INT32U)((TB_SysTick/1000000.0)*SystemFreq);
  152.         ticks=ticks;
  153.         //SysTick_Config(ticks);
  154. }
  155. //******************************************************************************
  156. // GPIO設置
  157. //******************************************************************************
  158. static void GPIO_Configuration(void)
  159. {
  160.         GPIO_InitTypeDef GPIO_InitStructure;

  161.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC
  162.                                                         |RCC_APB2Periph_GPIOD, ENABLE);

  163.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7;
  164.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  165.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  166.           GPIO_Init(GPIOC, &GPIO_InitStructure);

  167.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
  168.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  169.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  170.           GPIO_Init(GPIOC, &GPIO_InitStructure);

  171.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4;
  172.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
  173.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  174.           GPIO_Init(GPIOD, &GPIO_InitStructure);
  175. }
  176. //******************************************************************************
  177. // 主程序
  178. //******************************************************************************
  179. int main(void)
  180. {
  181.         RCC_Configuration();
  182.           GPIO_Configuration();
  183.         NVIC_Configuration();
  184.           SysTick_Config1();

  185.         delayms(10);       
  186.         test_x5043();
  187.         for (;;)
  188.         {
  189.                 delayms(100);       
  190.                 GPIOC->ODR ^= GPIO_Pin_5;                // led4 toogle
  191.         }
  192. }
  193. //******************************************************************************
  194. #ifdef  USE_FULL_ASSERT

  195. /**
  196.   * @brief  Reports the name of the source file and the source line number
  197.   *   where the assert_param error has occurred.
  198.   * @param file: pointer to the source file name
  199.   * @param line: assert_param error line source number
  200.   * @retval : None
  201.   */
  202. void assert_failed(uint8_t* file, uint32_t line)
  203. {
  204.   /* User can add his own implementation to report the file name and line number,
  205.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  206.   /* Infinite loop */
  207.   while (1)
  208.   {
  209.   }
  210. }
  211. #endif

  212. /**
  213.   * @}
  214.   */
  215. //******************************************************************************
  216. /******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
  217. //******************************************************************************
  218. /*
  219.         LED2---------PC7
  220.         LED3---------PC6
  221.         LED4---------PC5
  222.         LED5---------PC4

  223.         KEY2---------PD3
  224.         KEY3---------PD4
  225. */
復制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:263866 發表于 2017-12-19 19:20 | 只看該作者
下下來學習學習
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 美国av毛片 | 午夜精品视频在线观看 | 成人久草 | 久久久久久成人 | 亚洲精品一区二区三区中文字幕 | 手机三级电影 | 日韩一区二区三区视频在线观看 | 一区二区三区国产 | 亚洲精品一区二区三区免 | 911网站大全在线观看 | 国产亚洲精品美女久久久久久久久久 | 一区二区久久电影 | 国产成人在线看 | 成人免费视频 | 久久久久久久久久久久久91 | 日韩综合| 欧美一区二区小视频 | 中文字幕在线一区 | 成人午夜高清 | 日韩精品一区二区三区在线观看 | 91精品国产91久久久久福利 | 免费久久网 | 亚洲视频免费播放 | 国产欧美一区二区精品久导航 | 欧美成人精品激情在线观看 | 狠狠涩 | 中文字幕在线视频免费视频 | 99久久婷婷国产综合精品电影 | 国产精品久久久久久久久久免费看 | 91久久精品一区二区二区 | 黄色免费观看 | 免费在线观看一区二区 | a级在线免费 | 国产精品日韩 | 日韩免费一区 | 久久一热| 欧美日韩中文字幕在线 | 日本在线你懂的 | 密室大逃脱第六季大神版在线观看 | 欧美三级在线 | 超碰在线网站 |