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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7260|回復: 1
收起左側

控制stm32開發版的LED閃爍周期實驗

[復制鏈接]
ID:399677 發表于 2018-9-18 20:15 | 顯示全部樓層 |閱讀模式
實驗報告

實驗課程名稱:嵌入式linux

實驗項目名稱:控制stm32開發版的LED閃爍周期

實驗類型:實驗型


實驗目的與要求
  • 熟悉相關操作環境的安裝。
  • 掌握putty  ,flymcu  和keilu visiin等相關軟件的操作方法。
  • 了解和掌握stm32相關的基本知識,學會設置stm32的gpio輸出在控制led燈。
實驗原理
1.STM32開發板上面 LED 的接線圖
LED 燈是接到單片機的 PC 口的 PC0 到 PC7。而
點 亮一盞LED的原理就是把相應LED接到單片機的相應的IO口輸出低電平, IO
口 輸出為高電平就能夠熄滅 LED(由圖中得LED燈都是共陽極接高電平,所以
當所接開發板的引腳輸出低電平時,有電流流過LED燈,燈才亮)。
2.STM32GPIO的8種工作模式(輸入4種+輸出4種)。
設備與軟件環境
1、硬件:STM32
2、軟件:keil uVision5,FlyMcu,PortHelper,putty
3、操作系統windows 10

實驗過程與結果
實驗過程:
1、連接開發板
gpio初始化配置,由于STM32的GPIO工作模式有8種(輸入4種+輸出4種),所以在GPIO輸出之前要先對要操作的GPIO進行配置。
2、打開keil5進行代碼編寫(部分貼圖)
3、使用FlyMcu將編譯好的程序文件下載到開發板
加載好生成的hex文件后,就可以點擊"開始編程"了,等待一小會,就會看到下載完成,通過鍵盤輸入時間間隔就看到小燈閃爍了。
4、利用串口調試工具PortHelper進行調試。
實驗結果:
操作異常問題與解決方案
  • 代碼指令有誤,檢查不仔細。解決辦法:重新更正代碼,
  • 所用stm32開發板略復雜有些端口指令不明確;解決辦法:積極詢問老師以及同學,查詢資料。

實驗總結
通過控制led閃爍的學習,基本掌握了stm32開發版的相關知識, 更加深刻了解了FlyMcu如何將程序下載過程,也對整個調試的過程充滿了興趣,更加了解了嵌入式這門課程;在這個過程中也讓我明白了集思廣益的重要性。
  1. 以下是主代碼
  2. #include "stm32f4xx.h"
  3. #include "led.h"
  4. #include "delay.h"
  5. #include "usart.h"
  6. u8 Res = '1';
  7. int led_num;

  8. int main(void)
  9. {
  10.             
  11.               NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //éè???òá??D??×é
  12.             
  13.               LED_Init();
  14.               delay_Init(168);
  15.               USART1_Init(115200);

  16.             
  17.               while(1)
  18.               {  
  19.                             printf("recive : %c\n", Res);
  20.     led_num=Res-'0';
  21.                             if(led_num==1)
  22.                             {
  23.                                           GPIO_ResetBits(GPIOF, GPIO_Pin_9);
  24.                                          
  25.                                           delay_haomiao(500);
  26.                            
  27.                                           GPIO_SetBits(GPIOF, GPIO_Pin_9);
  28.                                          
  29.                                           delay_haomiao(500);
  30.                             }
  31.                             else if(led_num==2)
  32.                             {
  33.                                           GPIO_ResetBits(GPIOF, GPIO_Pin_9);
  34.                                          
  35.                                           delay_haomiao(1000);
  36.                            
  37.                                           GPIO_SetBits(GPIOF, GPIO_Pin_9);
  38.                                          
  39.                                           delay_haomiao(1000);
  40.                             }
  41.                             else if(led_num==3)
  42.                             {
  43.                                           GPIO_ResetBits(GPIOF, GPIO_Pin_9);
  44.                                           delay_miao(1);
  45.                                           delay_haomiao(500);
  46.                            
  47.                                           GPIO_SetBits(GPIOF, GPIO_Pin_9);
  48.                                           delay_miao(1);
  49.                                           delay_haomiao(500);
  50.                             }
  51.                             else if(led_num==4)
  52.                             {
  53.                                           GPIO_ResetBits(GPIOF, GPIO_Pin_9);
  54.                                          
  55.                                           delay_miao(2);
  56.                            
  57.                                           GPIO_SetBits(GPIOF, GPIO_Pin_9);
  58.                                          
  59.                                           delay_miao(2);
  60.                             }
  61.                             else if(led_num==5)
  62.                             {
  63.                                           GPIO_ResetBits(GPIOF, GPIO_Pin_9);
  64.                                           delay_miao(2);
  65.                                           delay_haomiao(500);
  66.                            
  67.                                           GPIO_SetBits(GPIOF, GPIO_Pin_9);
  68.                                           delay_miao(2);
  69.                                           delay_haomiao(500);
  70.                             }
  71.                             else if(led_num==6)
  72.                             {
  73.                                           GPIO_ResetBits(GPIOF, GPIO_Pin_9);
  74.                                          
  75.                                           delay_miao(3);
  76.                            
  77.                                           GPIO_SetBits(GPIOF, GPIO_Pin_9);
  78.                                          
  79.                                           delay_miao(3);
  80.                             }
  81.                             else if(led_num==7)
  82.                             {
  83.                                           GPIO_ResetBits(GPIOF, GPIO_Pin_9);
  84.                                           delay_miao(3);
  85.                                           delay_haomiao(500);
  86.                            
  87.                                           GPIO_SetBits(GPIOF, GPIO_Pin_9);
  88.                                           delay_miao(3);
  89.                                           delay_haomiao(500);
  90.                             }
  91.                             else if(led_num==8)
  92.                             {
  93.                                           GPIO_ResetBits(GPIOF, GPIO_Pin_9);
  94.                                           delay_miao(4);
  95.                            
  96.                                           GPIO_SetBits(GPIOF, GPIO_Pin_9);
  97.                                           delay_miao(4);
  98.                             }
  99.                             else if(led_num==9)
  100.                             {
  101.                                           GPIO_ResetBits(GPIOF, GPIO_Pin_9);
  102.                                           delay_miao(4);
  103.                                           delay_haomiao(500);
  104.                            
  105.                                           GPIO_SetBits(GPIOF, GPIO_Pin_9);
  106.                                           delay_miao(4);
  107.                                           delay_haomiao(500);
  108.                             }
  109.               }
  110. }


  111. void USART1_IRQHandler(void)
  112. {
  113.             
  114.               if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  115.               {
  116.                            
  117.                             USART_ClearITPendingBit(USART1,USART_IT_RXNE);

  118.                             Res = USART_ReceiveData(USART1);                }

  119. }

  120. 以下是調用的函數代碼
  121. (led.c)

  122. #include "led.h"

  123. void LED_Init(void)
  124. {
  125.               GPIO_InitTypeDef GPIO_InitStructure;
  126.             
  127.               //ê1?üGPIOAê±?ó
  128.               RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
  129.             
  130.               //????GPIO2?êy
  131.               GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
  132.               GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  133.               GPIO_InitStructure.GPIO_Speed = GPIO_Fast_Speed;
  134.               GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  135.               GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  136.             
  137.               GPIO_Init(GPIOF, &GPIO_InitStructure);
  138.             
  139.               GPIO_SetBits(GPIOF, GPIO_Pin_9);
  140.               GPIO_SetBits(GPIOF, GPIO_Pin_10);
  141. }


  142. (delay.h)
  143. #include "delay.h"

  144. u8  my_us = 0;
  145. u16 my_ms = 0;

  146. /**
  147.   *              延時功能初始化
  148.   */
  149. void delay_Init(u8 fsc)
  150. {
  151.               //配置系統滴答時鐘源
  152.               SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
  153.             
  154.               //系統總線最高時鐘頻率進行8分頻后得到的值
  155.               my_us = fsc/8;
  156.               my_ms = (fsc/8)*1000;
  157. }

  158. /**
  159.   *  微秒延時函數
  160.   */
  161. void delay_us(u32 us)
  162. {
  163.               u32 uTime = 0;
  164.             
  165.               //Systick寄存器配置
  166.               SysTick->LOAD = us*my_us;  //自動裝載值
  167.               SysTick->VAL = 0x00;              //Systick定時器當前值
  168.               SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;              //使能Systick定時器
  169.             
  170.               do{
  171.                             uTime = SysTick->CTRL;
  172.               }while(!(uTime & (1<<16)));
  173.             
  174.               SysTick->VAL = 0x00;              //Systick定時器當前值
  175.               SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;              //關閉Systick定時器
  176. }

  177. /**
  178.   *  毫秒延時函數
  179.   */
  180. void delay_ms(u32 ms)
  181. {
  182.               u32 mTime = 0;
  183.             
  184.               //Systick寄存器配置
  185.               SysTick->LOAD = ms*my_ms;  //自動裝載值
  186.               SysTick->VAL = 0x00;              //Systick定時器當前值
  187.               SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;              //使能Systick定時器
  188.             
  189.               do{
  190.                             mTime = SysTick->CTRL;
  191.               }while(!(mTime & (1<<16)));
  192.             
  193.               SysTick->VAL = 0x00;              //Systick定時器當前值
  194.               SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;              //關閉Systick定時器
  195. }

  196. /**
  197.   *  秒延時函數
  198.   */
  199. void delay_s(u32 s)
  200. {
  201.               u32 i = 0;
  202.             
  203.               for(;i<s; i++)
  204.               {
  205.                             delay_ms(500);
  206.                             delay_ms(500);
  207.               }
  208. }

  209. (usart.h)
  210. #include "usart.h"

  211. //加入以下代碼,支持printf函數
  212. #if 1            
  213. #pragma import(__use_no_semihosting)            
  214. //標準庫需要的支持函數               
  215. struct __FILE
  216. {
  217.               int handle;
  218. };

  219. FILE __stdout;      
  220. //定義_sys_exit()以避免使用半主機模式   
  221. void _sys_exit(int x)
  222. {
  223.               x = x;
  224. }
  225. //重定義fputc函數
  226. int fputc(int ch, FILE *f)
  227. {              
  228.               while((USART1->SR&0X40)==0);//循環發送,直到發送完畢  
  229.               USART1->DR = (u8) ch;     
  230.               return ch;
  231. }
  232. #endif

  233. void USART1_Init(uint32_t baud)              //初始化串口1
  234. {
  235.               GPIO_InitTypeDef GPIO_InitStructure;
  236.               USART_InitTypeDef USART_InitStructure;
  237.               NVIC_InitTypeDef NVIC_InitStructure;
  238.             
  239.               //開啟串口時鐘和GPIO時鐘
  240.               RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); //使能串口1IO口的時鐘
  241.               RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); //使能串口1通道時鐘
  242.             
  243.               //配置串口1相應IO口,將其模式設置為復用模式 -- PA9  PA10
  244.               GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
  245.               GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  246.               GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  247.               GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
  248.               GPIO_InitStructure.GPIO_Speed = GPIO_High_Speed;
  249.             
  250.               GPIO_Init(GPIOA, &GPIO_InitStructure);
  251.             
  252.               //串口1對應引腳復用映射
  253.               GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);                                                                                     //GPIOA9復用為USART1
  254.               GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);                                                                                     //GPIOA10復用為USART1
  255.             
  256.               //配置并初始化串口結構體參數
  257.               USART_InitStructure.USART_BaudRate = baud;
  258.               USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  259.               USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  260.               USART_InitStructure.USART_StopBits = USART_StopBits_1;
  261.               USART_InitStructure.USART_Parity = USART_Parity_No;
  262.               USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

  263.               USART_Init(USART1, &USART_InitStructure);

  264. #if 1
  265.               //配置內嵌向量中斷控制器NVIC
  266.               NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
  267.               NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
  268.               NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
  269.               NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  270.             
  271.               NVIC_Init(&NVIC_InitStructure);

  272.               //打開串口1中斷
  273.               USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  274. #endif

  275.               //打開串口1
  276.               USART_Cmd(USART1, ENABLE);
  277. }
復制代碼
完整的Word格式文檔51黑下載地址:
控制stm32開發版的LED閃爍周期.docx (807.64 KB, 下載次數: 8)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:18591 發表于 2019-2-4 15:26 | 顯示全部樓層
下來學習一下~~~~~~~~~~~~~~~~~~~~~~~~~
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美激情一区二区三区 | 在线一区 | 日韩一区二区在线播放 | 99这里只有精品视频 | 日韩中文字幕视频在线观看 | 欧美三区在线观看 | 欧美在线看片 | 日批日韩在线观看 | 三级在线视频 | 欧美在线天堂 | 成人在线免费观看视频 | 午夜不卡一区二区 | 欧美日韩精品一区 | 国产精品jizz在线观看老狼 | 久久婷婷av | 国产美女在线看 | 美女一级a毛片免费观看97 | 日本精品视频 | 成人在线a| 国产精品久久久久久久久久久久冷 | 亚洲不卡一 | 中文字字幕一区二区三区四区五区 | 人人澡人人射 | 中文在线一区二区 | 在线免费观看黄色 | 在线免费av电影 | 在线播放国产一区二区三区 | 欧美福利一区 | 国产精品高清在线 | 亚洲乱码国产乱码精品精的特点 | 免费视频一区 | 九九热这里| 91精品国产91久久久久久 | 日韩精品久久久久 | 国产日韩一区 | 美女张开腿露出尿口 | 日韩欧美在线视频 | 日韩在线免费 | 99久久精品免费看国产高清 | 国产 日韩 欧美 制服 另类 | 亚洲免费观看视频 |