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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32控制LED代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:325383 發表于 2018-5-8 20:32 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
1設計要求
控制實驗平臺的發光二極管LED1、LED2、LED3、LED4,使它們有規律的點亮,具體順序如下:
LED1亮->LED2亮->LED3亮->LED4亮,如此反復,當按下開發板上的B3按鈕時,燈全部熄滅,
2秒鐘后發光二極管全部點亮,再過一秒鐘后返回被中斷前的狀態,有規律的依次點亮。

2 硬件電路設計
在評估板上,LED1、LED2、LED3、LED4分別與PC6、PC7、PC8、PC9相連,按鍵Key與PB9相連。

3軟件程序設計
根據任務要求,程序內容主要包括:
(1)    配置PB口第9個引腳作為外部中斷,下降延觸發;
(2)    讀取端口數據輸出寄存器GPIOC_ODR[15:0]的值,因為C口[9:6]位和四個LED燈連通。   
(3)    初始化時,LED依次點亮,當按下Key鍵時產生中斷;
(4)    中斷服務子程序內容:燈全部熄滅,2秒鐘后發光二極管全部點亮,再過1秒鐘后中斷返回。
整個工程包含3個源文件:STM32F10x.s、stm32f10x_it.c和main.c,其中STM32F10x.s為啟動代碼,
所有中斷服務子程序均在stm32f10x_it.c中,其它函數則在main.c中。下面分別介紹相關的函數,
具體程序清單見參考程序。
GPIO_Configuration函數負責配置GPIO端口,其中GPIO_InitStructure數據結構包含所有GPIO端口
配置所需各項,函數GPIO_Init則實現某個端口的配置。在STM32F10xR.LIB和STM3210xD.LIB中均已
定義,讀者可通過查閱5.3節所述的ST公司發布的《ARM?-based 32-bit MCU STM32F101xx and
STM32F103xx Firmware Library》手冊來了解該數據結構以及相關驅動函數。
NVIC_Configuration函數用于配置嵌入式中斷控制器,相關內容將在后面章節介紹,此處需要將PB9
引腳配置為外部中斷。
EXTI9_5_IRQHandler函數是PB9的中斷服務子程序,當按下Key按鈕之后觸發EXTI9_5中斷,在中斷服
務子程序中先將燈全部熄滅,延遲2秒后全部點亮,再延遲1秒之后退出中斷服務子程序。
SysTick_Configuration函數用于配置和允許系統時鐘中斷,系統時鐘中斷服務子程序SysTickHandler
函數則用于產生1毫秒的延時,這樣Delay函數就可以通過開關系統時鐘計數器來實現精確延時了。

4 運行過程
(1)    使用Keil uVision3 通過ULINK 2仿真器連接實驗板,打開實驗例程目錄GPIO_TEST子目錄下的
GPIO.Uv2例程,編譯鏈接工程;
(2)    選擇軟件調試模式,點擊MDK 的Debug菜單,選擇Start/Stop Debug Session項或Ctrl+F5鍵,
在邏輯分析儀中添加GPIOC_ODR.6、GPIOC_ODR.7、GPIOC_ODR.8、GPIOC_ODR.9,點擊Run按鈕即可在
邏輯分析儀中看到如圖7-11;
(3)    選擇硬件調試模式,選擇Start/Stop Debug Session項或Ctrl+F5鍵,下載程序并運行,觀察LED
燈的變化情況;當程序運行在while循環體內時,按Key鍵,程序進入中斷服務子程序EXTI9_5_IRQHandler(),
單步運行,觀察LED的變化情況。
(4)    退出Debug模式,打開Flash菜單>Download,將程序下載到開發板的Flash中,按RESET鍵復位,
觀察LED燈的情況,正常情況應如表7-6所列。

LED燈狀態    說    明
LED1    LED2    LED3    LED4   
亮        滅        滅        滅        程序正常運行,發光二極管依次點亮
滅        亮        滅        滅   
滅        滅        亮        滅   
滅        滅        滅        亮   
滅        滅        滅        滅          外部信號輸入,發生中斷,執行中斷處理程序
亮        亮        亮        亮   

單片機源程序:
  1. /*******************************************************************************
  2. * File Name          : main.c
  3. * Author             : Wuhan R&D Center, Embest
  4. * Date First Issued  : 08/08/2008
  5. * Description        : Main program body
  6. ********************************************************************************/

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


  9. /* Private typedef -----------------------------------------------------------*/
  10. /* Private define ------------------------------------------------------------*/
  11. /* Private macro -------------------------------------------------------------*/
  12. /* Private variables ---------------------------------------------------------*/
  13. #define ADC1_DR_Address    ((u32)0x4001244C)

  14. unsigned short int ADC_ConvertedValue;
  15. GPIO_InitTypeDef GPIO_InitStructure;
  16. ADC_InitTypeDef   ADC_InitStructure;
  17. DMA_InitTypeDef   DMA_InitStructure;
  18. EXTI_InitTypeDef EXTI_InitStructure;
  19. ErrorStatus HSEStartUpStatus;
  20. extern vu32 TimingDelay;



  21. uc8 table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,                                //數碼管編碼
  22.                         0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

  23. /* Private function prototypes -----------------------------------------------*/
  24. void RCC_Configuration(void);
  25. void NVIC_Configuration(void);
  26. void GPIO_Configuration(void);
  27. void Delay(vu32 nTime);
  28. void SysTick_Configuration(void);
  29. void SetupLED (void) ;        
  30. extern void SetupADC    (void);
  31.         
  32. /* Private functions ---------------------------------------------------------*/

  33. /*******************************************************************************
  34. * Function Name  : main
  35. * Description    : Main program.
  36. * Input          : None
  37. * Output         : None
  38. * Return         : None
  39. *******************************************************************************/
  40. int main(void)
  41. {
  42. u8 i;
  43. #ifdef DEBUG
  44.   debug();
  45. #endif
  46.    
  47.   /* Configure the system clocks */
  48.   RCC_Configuration();
  49.   SysTick_Configuration();
  50.    
  51.   /* NVIC Configuration */
  52.   NVIC_Configuration();

  53.   /* Configure the GPIO ports */
  54.   GPIO_Configuration();
  55.                                                       



  56.         for(i=0;i<8;i++)
  57.            {
  58.                             GPIOE->ODR = 0xffffff00 | (1<<i);
  59.                          GPIOD->ODR = 0xffffffff ;
  60.                          Delay(100);
  61.                 }
  62.    for(;;)
  63.    {
  64.               for(i=0;i<8;i++)
  65.            {
  66.                             GPIOE->ODR = 0xffffffff & ~(1<<i);
  67.                          GPIOD->ODR = 0xffffff00 | table[i];
  68.                          Delay(800);
  69.                          //Delay(1);
  70.                 }
  71.         }   

  72. }

  73. /*******************************************************************************
  74. * Function Name  : SysTick_Configuration
  75. * Description    : Configures the SysTick to generate an interrupt each 1 millisecond.
  76. * Input          : None
  77. * Output         : None
  78. * Return         : None
  79. *******************************************************************************/
  80. void SysTick_Configuration(void)
  81. {
  82.   /* Select AHB clock(HCLK) as SysTick clock source */
  83.   SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);

  84.   /* Set SysTick Priority to 3 */
  85.   NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 3, 0);
  86.    
  87.   /* SysTick interrupt each 1ms with HCLK equal to 72MHz */
  88.   SysTick_SetReload(72000);

  89.   /* Enable the SysTick Interrupt */
  90.   SysTick_ITConfig(ENABLE);
  91. }



  92. /*******************************************************************************
  93. * Function Name  : RCC_Configuration
  94. * Description    : Configures the different system clocks.
  95. * Input          : None
  96. * Output         : None
  97. * Return         : None
  98. *******************************************************************************/
  99. void RCC_Configuration(void)
  100. {
  101.   /* RCC system reset(for debug purpose) */
  102.   RCC_DeInit();

  103.   /* Enable HSE */
  104.   RCC_HSEConfig(RCC_HSE_ON);

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

  107.   if(HSEStartUpStatus == SUCCESS)
  108.   {
  109.     /* HCLK = SYSCLK */
  110.     RCC_HCLKConfig(RCC_SYSCLK_Div1);
  111.   
  112.     /* PCLK2 = HCLK */
  113.     RCC_PCLK2Config(RCC_HCLK_Div1);

  114.     /* PCLK1 = HCLK/2 */
  115.     RCC_PCLK1Config(RCC_HCLK_Div2);

  116.     /* Flash 2 wait state */
  117.     FLASH_SetLatency(FLASH_Latency_2);
  118.     /* Enable Prefetch Buffer */
  119.     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

  120.     /* PLLCLK = 8MHz * 9 = 72 MHz */
  121.     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

  122.     /* Enable PLL */
  123.     RCC_PLLCmd(ENABLE);

  124.     /* Wait till PLL is ready */
  125.     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
  126.     {
  127.     }

  128.     /* Select PLL as system clock source */
  129.     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

  130.     /* Wait till PLL is used as system clock source */
  131.     while(RCC_GetSYSCLKSource() != 0x08)
  132.     {
  133.     }
  134.   }
  135.    
  136.   /* Enable GPIOB, GPIOC and AFIO clocks */
  137.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |
  138.                          RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE , ENABLE);
  139. }

  140. /*******************************************************************************
  141. * Function Name  : NVIC_Configuration
  142. * Description    : Configures Vector Table base location.
  143. * Input          : None
  144. * Output         : None
  145. * Return         : None
  146. *******************************************************************************/
  147. void NVIC_Configuration(void)
  148. {
  149. NVIC_InitTypeDef NVIC_InitStructure;
  150.   
  151. #ifdef  VECT_TAB_RAM  
  152.   /* Set the Vector Table base location at 0x20000000 */
  153.   NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
  154. #else  /* VECT_TAB_FLASH  */
  155.   /* Set the Vector Table base location at 0x08000000 */
  156.   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);   
  157. #endif

  158.   /* Configure one bit for preemption priority */
  159.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  160.   
  161.   /* Enable the EXTI9_5 Interrupt */
  162.   NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel;
  163.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  164.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  165.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  166.   NVIC_Init(&NVIC_InitStructure);
  167. }


  168. /*******************************************************************************
  169. * Function Name  : GPIO_Configuration
  170. * Description    : Configures the different GPIO ports.
  171. * Input          : None
  172. * Output         : None
  173. * Return         : None
  174. *******************************************************************************/
  175. void GPIO_Configuration(void)
  176. {
  177.   GPIO_InitTypeDef GPIO_InitStructure;

  178.   /* Configure PD. as Output push-pull */
  179.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  180.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  181.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  182.   GPIO_Init(GPIOD, &GPIO_InitStructure);

  183.   /* Configure PE. as Output push-pull */
  184.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  185.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  186.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  187.   GPIO_Init(GPIOE, &GPIO_InitStructure);
  188.    

  189. }


  190. /*******************************************************************************
  191. * Function Name  : Delay
  192. * Description    : Inserts a delay time.
  193. * Input          : nTime: specifies the delay time length, in milliseconds.
  194. * Output         : None
  195. * Return         : None
  196. *******************************************************************************/
  197. void Delay(u32 nTime)
  198. {
  199.   /* Enable the SysTick Counter */
  200.   SysTick_CounterCmd(SysTick_Counter_Enable);
  201.   
  202.   TimingDelay = nTime;

  203.   while(TimingDelay != 0);

  204.   /* Disable the SysTick Counter */
  205.   SysTick_CounterCmd(SysTick_Counter_Disable);
  206.   /* Clear the SysTick Counter */
  207.   SysTick_CounterCmd(SysTick_Counter_Clear);
  208. }

  209. /*******************************************************************************
  210. * Function Name  : Delay
  211. * Description    : Inserts a delay time.
  212. * Input          : nCount: specifies the delay time length.
  213. * Output         : None
  214. * Return         : None
  215. *******************************************************************************/
  216. /*
  217. void Delay(vu32 nCount)
  218. {
  219.   for(; nCount != 0; nCount--);
  220. ……………………

  221. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
2.數碼管.rar (52.23 KB, 下載次數: 19)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久久新郎 | 色爽女 | 91久久国产综合久久 | 91高清视频在线观看 | 久久综合一区 | 久久一及片 | 日屁视频 | 91视视频在线观看入口直接观看 | 三级免费av | 成人免费一级 | 日韩国产一区二区三区 | 99这里只有精品 | 亚洲少妇综合网 | 天天综合永久 | 免费av播放| 成人精品免费视频 | 蜜桃视频在线观看免费视频网站www | 亚洲一区二区视频在线播放 | 四虎影 | 中文字幕日韩欧美 | 99久久精品一区二区成人 | 九九色综合 | 国产精品亚洲片在线播放 | 成人伊人 | 欧美bondage紧缚视频 | 久久久日韩精品一区二区三区 | 91xxx在线观看 | 免费黄色录像视频 | 亚洲精品视频在线看 | 日本成人在线免费视频 | 国内自拍真实伦在线观看 | 亚洲成人av在线播放 | 国产精品3区 | 国产精品日本一区二区不卡视频 | 日韩在线观看 | 日韩中文字幕网 | 精品国产乱码久久久久久1区2区 | 亚洲欧洲视频 | 午夜黄色 | 国产成人综合在线 | 国产日韩一区二区三免费 |