找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1709|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于stm32f407的跑馬燈程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:825502 發(fā)表于 2020-10-3 16:56 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
基于stm32f407的跑馬燈這是我昨天做的基于stm32f407的跑馬燈,歡迎交流
  1. #include "led.h"
  2. #include "usart1.h"


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

  10. /*******************下面代碼是通過位帶操作實現(xiàn)IO口控制***************************/
  11. int main(void)
  12. {
  13.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設(shè)置系統(tǒng)中斷優(yōu)先級分組2
  14.         delay_init();                  //初始化延時函數(shù)
  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. }
復(fù)制代碼
  1. #include "usart1.h"
  2. #include "string.h"
  3. #include "stdlib.h"  
  4. #include "led.h"


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

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

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

  63. //串口1發(fā)送一個字符
  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. * 入口參數(shù):
  73. * 返回參數(shù):
  74. * 說    明:因printf()之類的函數(shù),使用了半主機模式。使用標(biāo)準(zhǔn)庫會導(dǎo)致程序無法
  75.             運行,以下是解決方法:使用微庫,因為使用微庫的話,不會使用半主機模式.
  76.             請在工程屬性的“Target“-》”Code Generation“中勾選”Use MicroLIB“這
  77.             樣以后就可以使用printf,sprintf函數(shù)了  
  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發(fā)送一字符串
  89. * 入口參數(shù):*str:發(fā)送的字符串
  90.             strlen:字符串長度
  91. * 返回參數(shù):無
  92. * 說    明:
  93. ****************************************************************************/
  94. void uart1SendChars(u8 *str, u16 strlen)
  95. {
  96.           u16 k= 0 ;
  97.    do { uart1SendChar(*(str + k)); k++; }   //循環(huán)發(fā)送,直到發(fā)送完畢   
  98.     while (k < strlen);
  99. }

  100. //串口1中斷服務(wù)程序
  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) 讀取接收到的數(shù)據(jù)
  107.         if(rec_data=='S')                                                   //如果是S,表示是命令信息的起始位
  108.                                 {
  109.                                         uart_byte_count=0x01;
  110.                                 }

  111.                         else if(rec_data=='E')                                         //如果E,表示是命令信息傳送的結(jié)束位
  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;        //關(guān)滅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;        //關(guān)滅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;        //關(guān)滅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. }
復(fù)制代碼
LED1.7z (290.83 KB, 下載次數(shù): 12)

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

51hei圖片20201003165458.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表