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

標題: 基于stm32f407的跑馬燈程序 [打印本頁]

作者: hunau_czc    時間: 2020-10-3 16:56
標題: 基于stm32f407的跑馬燈程序
基于stm32f407的跑馬燈這是我昨天做的基于stm32f407的跑馬燈,歡迎交流
  1. #include "led.h"
  2. #include "usart1.h"


  3. /*********************************************************************************
  4. **********************啟明欣欣 STM32F407應用開發板(高配版)************************
  5. **********************************************************************************
  6. * 文件名稱: 例程1 LED跑馬燈主函數main()                                          *
  7. * 文件簡述:LED跑馬燈                                                            *
  8. **********************************************************************************
  9. *********************************************************************************/

  10. /*******************下面代碼是通過位帶操作實現IO口控制***************************/
  11. int main(void)
  12. {
  13.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置系統中斷優先級分組2
  14.         delay_init();                  //初始化延時函數
  15.         LED_Init();                    //初始化LED端口
  16.         uart1_init(115200);
  17.   while(1)
  18.         {
  19.     LED0=0;     //LED0亮
  20.     LED1=1;     //LED1滅
  21.     LED2=1;     //LED2滅
  22.            printf("LED0 is light!\r\n");
  23.     delay_ms(500);
  24.                 LED0=1;     //LED0滅
  25.     LED1=0;     //LED1亮
  26.     LED2=1;     //LED2滅
  27.     printf("LED1 is light!\r\n");
  28.                 delay_ms(500);
  29.                 LED0=1;     //LED0滅
  30.     LED1=1;     //LED1滅
  31.     LED2=0;     //LED2亮
  32.            printf("LED2 is light!\r\n");
  33.     delay_ms(500);
  34.         }
  35. }
復制代碼
  1. #include "usart1.h"
  2. #include "string.h"
  3. #include "stdlib.h"  
  4. #include "led.h"


  5. /*********************************************************************************
  6. ************************啟明欣欣 STM32F407核心開發板******************************
  7. **********************************************************************************
  8. * 文件名稱: usart1.c                                                             *
  9. * 文件簡述:USART1使用                                                           *
  10. * 創建日期:2015.03.06                                                           *
  11. * 版    本:V1.0                                                                 *
  12. * 作    者:Clever                                                               *
  13. * 說    明:利用串口調試助手經過USART1控制LED亮滅與蜂鳴器響閉                    *
  14. **********************************************************************************
  15. *********************************************************************************/        

  16. u8 receive_str[USART1_REC_NUM];     //接收緩存數組,最大USART_REC_LEN個字節
  17. u8 uart_byte_count=0;

  18. /****************************************************************************
  19. * 名    稱: void uart1_init(u32 bound)
  20. * 功    能:USART1初始化
  21. * 入口參數:bound:波特率
  22. * 返回參數:無
  23. * 說    明:
  24. ****************************************************************************/
  25. void uart1_init(u32 bound)
  26. {   //GPIO端口設置
  27.   GPIO_InitTypeDef GPIO_InitStructure;
  28.         USART_InitTypeDef USART_InitStructure;
  29.         NVIC_InitTypeDef NVIC_InitStructure;
  30.         
  31.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA時鐘
  32.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1時鐘
  33.         //串口1對應引腳復用映射
  34.         GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);  //GPIOA9復用為USART1
  35.         GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10復用為USART1
  36.         //USART1端口配置
  37.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9與GPIOA10
  38.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;      //復用功能
  39.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //速度50MHz
  40.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽復用輸出
  41.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;   //上拉
  42.         GPIO_Init(GPIOA,&GPIO_InitStructure);          //初始化PA9,PA10
  43.    //USART1 初始化設置
  44.         USART_InitStructure.USART_BaudRate = bound;//波特率設置
  45.         USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字長為8位數據格式
  46.         USART_InitStructure.USART_StopBits = USART_StopBits_1;  //一個停止位
  47.         USART_InitStructure.USART_Parity = USART_Parity_No;//無奇偶校驗位
  48.         USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件數據流控制
  49.         USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;        //收發模式
  50.   USART_Init(USART1, &USART_InitStructure); //初始化串口1        
  51.   USART_Cmd(USART1, ENABLE);  //使能串口1
  52.         
  53.         USART_ClearFlag(USART1, USART_FLAG_TC);
  54.         
  55.         USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);         //開啟相關中斷
  56.         //Usart1 NVIC 配置
  57.   NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;      //串口1中斷通道
  58.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//搶占優先級3
  59.         NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;                   //子優先級3
  60.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;                           //IRQ通道使能
  61.         NVIC_Init(&NVIC_InitStructure);          //根據指定的參數初始化VIC寄存器、
  62. }

  63. //串口1發送一個字符
  64. void uart1SendChar(u8 ch)
  65. {      
  66.         while((USART1->SR&0x40)==0);  
  67.     USART1->DR = (u8) ch;      
  68. }

  69. /****************************************************************************
  70. * 名    稱: int fputc(int ch, FILE *f)
  71. * 功    能:重定向,讓printf輸出到串口  
  72. * 入口參數:
  73. * 返回參數:
  74. * 說    明:因printf()之類的函數,使用了半主機模式。使用標準庫會導致程序無法
  75.             運行,以下是解決方法:使用微庫,因為使用微庫的話,不會使用半主機模式.
  76.             請在工程屬性的“Target“-》”Code Generation“中勾選”Use MicroLIB“這
  77.             樣以后就可以使用printf,sprintf函數了  
  78. ****************************************************************************/
  79. int fputc(int ch, FILE *f)   //重定向,讓printf輸出到串口  
  80. {
  81.     uart1SendChar(ch);
  82.     while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
  83.         
  84.     return ch;
  85. }

  86. /****************************************************************************
  87. * 名    稱: void uart1SendChars(u8 *str, u16 strlen)
  88. * 功    能:串口1發送一字符串
  89. * 入口參數:*str:發送的字符串
  90.             strlen:字符串長度
  91. * 返回參數:無
  92. * 說    明:
  93. ****************************************************************************/
  94. void uart1SendChars(u8 *str, u16 strlen)
  95. {
  96.           u16 k= 0 ;
  97.    do { uart1SendChar(*(str + k)); k++; }   //循環發送,直到發送完畢   
  98.     while (k < strlen);
  99. }

  100. //串口1中斷服務程序
  101. void USART1_IRQHandler(void)  
  102. {
  103.         u8 rec_data;
  104.         if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中斷
  105.                 {
  106.                                 rec_data =(u8)USART_ReceiveData(USART1);         //(USART1->DR) 讀取接收到的數據
  107.         if(rec_data=='S')                                                   //如果是S,表示是命令信息的起始位
  108.                                 {
  109.                                         uart_byte_count=0x01;
  110.                                 }

  111.                         else if(rec_data=='E')                                         //如果E,表示是命令信息傳送的結束位
  112.                                 {
  113.                                         if(strcmp("Light_led0",(char *)receive_str)==0)        LED0=0;        //點亮LED1
  114.                                         else if(strcmp("Close_led0",(char *)receive_str)==0)   LED0=1;        //關滅LED1
  115.                                         if(strcmp("Light_led1",(char *)receive_str)==0)        LED1=0;        //點亮LED1
  116.                                         else if(strcmp("Close_led1",(char *)receive_str)==0)   LED1=1;        //關滅LED1
  117.                                         if(strcmp("Light_led2",(char *)receive_str)==0)        LED2=0;        //點亮LED1
  118.                                         else if(strcmp("Close_led2",(char *)receive_str)==0)   LED2=1;        //關滅LED1
  119. //                                        else if(strcmp("Open_beep",(char *)receive_str)==0)    BEEP=1;         //蜂鳴器響
  120. //                                        else if(strcmp("Close_beep",(char *)receive_str)==0)   BEEP=0;         //蜂鳴器不響
  121.                                        
  122.                                         for(uart_byte_count=0;uart_byte_count<32;uart_byte_count++)receive_str[uart_byte_count]=0x00;
  123.                                         uart_byte_count=0;   
  124.                                 }                                 
  125.                         else if((uart_byte_count>0)&&(uart_byte_count<=USART1_REC_NUM))
  126.                                 {
  127.                                    receive_str[uart_byte_count-1]=rec_data;
  128.                                    uart_byte_count++;
  129.                                 }                                 
  130.    }
  131. }
復制代碼
LED1.7z (290.83 KB, 下載次數: 12)

51hei圖片20201003165458.png (69.62 KB, 下載次數: 43)

51hei圖片20201003165458.png





歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲成人免费视频在线 | 久久精品国产清自在天天线 | 日韩在线观看中文字幕 | 嫩草影院网址 | 黄a免费看| 国产成人免费 | 九色视频网 | 亚洲国产看片 | 狠狠干av | 国产成人jvid在线播放 | 97久久精品午夜一区二区 | 一区二区三区四区在线 | 91精品国产综合久久久久久 | 精品毛片视频 | 午夜成人在线视频 | 欧美free性| 激情欧美一区二区三区中文字幕 | 久久综合av | 久久成人人人人精品欧 | 欧美色综合一区二区三区 | 亚洲国产一区二区三区, | 国产精品免费大片 | 国产一级精品毛片 | 毛片在线看片 | 久久精品黄色 | 国产精品久久久久久久久久尿 | 中文字幕av高清 | 精国产品一区二区三区四季综 | av乱码 | 国产一区二区久久 | 色综合久久88色综合天天 | 久精品久久 | 在线第一页 | 成人性视频在线 | 日韩精品免费在线观看 | 北条麻妃av一区二区三区 | 三级免费| 国产传媒视频在线观看 | 亚洲 欧美 综合 | 91精品国产综合久久久久久丝袜 | 激情六月天 |