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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stm32f103r6單片機的中斷程序 PA5也莫名其妙的是低電平?

[復制鏈接]
跳轉到指定樓層
樓主
求幫忙指點一下 謝謝大家
程序寫出來后仿真功能一直不實現

PA5也莫名其妙的是低電平
中斷前000-999遞增計數
中斷后顯示6個數字

用proteus8.9以上打開

單片機源程序如下:
  1. #include "stm32f10x.h"
  2. #define GPIO_InitStructure g

  3. uint16_t table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  4. uint16_t wei[]={0x0fe,0x0fd,0x0fb,0x0f7,0x0ef,0x0df,0xff,0xff};
  5. uint16_t xuehao[]={0x7d,0x4f,0x3f,0x5b,0x5b,0x6f};
  6. u16 i;
  7. u8 ssec,sec,min; //毫秒,秒,分
  8. u8 DisplayData[3];
  9. uint8_t flag_led_bling=1;

  10. void EXTI0_IRQHandler(void)
  11. {
  12.         if(EXTI_GetITStatus(EXTI_Line0)!=RESET)
  13.         {
  14.                         flag_led_bling=1-flag_led_bling;
  15.                         EXTI_ClearITPendingBit(EXTI_Line0);
  16.         }
  17. }
  18. /**
  19.   * @簡介:NVIC初始化
  20.   * @參數: 無
  21.   * @返回值:無
  22.   */
  23. void NVIC_Configure(void)
  24. {
  25.         /* 定義NVIC結構體 */
  26.         NVIC_InitTypeDef NVIC_InitStructure;
  27.         /* 選擇中斷分組 */
  28.           NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);        
  29.   
  30.           /* 配置P[A|B|C|D|E]0為中斷源 */
  31.         /* 選擇中斷通道 */
  32.           NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
  33.         /* 設置搶占優先級 */
  34.           NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  35.         /* 設置響應優先級 */
  36.           NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
  37.         /* 中斷使能 */         
  38.           NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;        
  39.         /* 調用NVIC_Init()完成中斷配置 */        
  40.           NVIC_Init(&NVIC_InitStructure);                                                
  41. }


  42. /**
  43.   * @簡介:按鍵初始化,帶中斷
  44.   * @參數: 無
  45.   * @返回值:無
  46.   */
  47. void KEY_Configure(void)
  48. {
  49.         /* 定義GPIO初始化結構體 */
  50.         GPIO_InitTypeDef GPIO_InitStructure;
  51.         /* 定義EXTI初始化結構體 */
  52.         EXTI_InitTypeDef EXTI_InitStructure;
  53.         
  54.         /* 打開GPIOA和AFIO時鐘 */
  55.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE);

  56.         /* 配置PA0為上拉輸入 */
  57.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  58.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
  59.         
  60.         /* 完成配置 */
  61.         GPIO_Init(GPIOA, &GPIO_InitStructure);
  62.         
  63.         /* 選擇中斷管腳 */
  64.         GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
  65.         /* 選擇中斷線路 */
  66.           EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  67.         /* 設置為中斷請求 */                        
  68.           EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;        
  69.         /* 設置中斷觸發方式:雙邊沿觸發 */
  70.           EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
  71.         /* 中斷線使能 */
  72.           EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  73.         /* 調用EXTI_Init()函數完成中斷初始化 */                        
  74.           EXTI_Init(&EXTI_InitStructure);                 

  75. }

  76. /**
  77.   * @簡介:按鍵狀態
  78.   * @參數: 無
  79.   * @返回值:按鍵狀態,0-按下,1-松開
  80.   */
  81. uint8_t KEY_Down_Up(void)
  82. {
  83.         return GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
  84. }


  85. void SEG_Init(void)
  86. {
  87.         GPIO_InitTypeDef  g;
  88. //使能GPIOC時鐘
  89.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);
  90.         g.GPIO_Pin = 0x00ff;                                        //PC0-PC7引腳配置
  91.         g.GPIO_Mode = GPIO_Mode_Out_PP;   //配置為推挽輸出
  92.         g.GPIO_Speed = GPIO_Speed_50MHz;   //GPIOC速度為50MHz
  93.   GPIO_Init(GPIOC, &g);                                //初始化PC0-PC7
  94.         g.GPIO_Pin = 0x003f;                                        //PB0-PC5引腳配置
  95.         g.GPIO_Mode = GPIO_Mode_Out_PP;   //配置為推挽輸出
  96.         g.GPIO_Speed = GPIO_Speed_50MHz;   //GPIOB速度為50MHz
  97.   GPIO_Init(GPIOB, &g);                                //初始化PB0-PB5
  98.         
  99. }

  100. void delay(u16 i)
  101. {
  102.         while(i--);        
  103. }

  104. void DigDisplay()
  105. {
  106.         u8 i;
  107.         for(i=0;i<4;i++)
  108.         {
  109.                 switch(i)         //位選,選擇點亮的數碼管,
  110.                 {
  111.                         
  112.                         case(0):
  113.                                 GPIO_Write(GPIOB,wei[0]); break;//顯示第2位
  114.                         case(1):
  115.                                 GPIO_Write(GPIOB,wei[1]); break;//顯示第1位
  116.                         case(2):
  117.                                 GPIO_Write(GPIOB,wei[2]); break;//顯示第0位        
  118.                 }
  119.                 GPIO_Write(GPIOC,DisplayData[i]);//發送段碼
  120.                 delay(65535); //間隔一段時間掃描        
  121.                 GPIO_Write(GPIOC,0x000);//消隱
  122.                 delay(10);
  123.         }
  124. }

  125. void datapros()
  126. {

  127.         
  128.         DisplayData[2]=table[sec%10];
  129.         
  130.         DisplayData[1]=table[ssec/10];
  131.         DisplayData[0]=table[ssec%10];
  132. }

  133. int main()
  134. {        
  135.         
  136.         SEG_Init();
  137.         NVIC_Configure();//NVIC 配置
  138.         KEY_Configure();//KEY 配置
  139.         
  140.                 if(flag_led_bling)
  141.                         {
  142.        for(i=0;i<1000;i++)
  143.                          {
  144.                                 ssec++;
  145.                                 if(ssec==100)
  146.                                 {sec++; ssec=0;}
  147.                                 datapros();
  148.                                 DigDisplay();        
  149.                          }
  150.               }
  151.                
  152.                 else{
  153.                                         while(1)
  154.                 {
  155.                 for(i=1;i<7;i++)
  156.                 {
  157.                         GPIO_Write(GPIOB,wei[i-1]);
  158.                         GPIO_Write(GPIOC,xuehao[i-1]);

  159.                         delay(2300);
  160.                         GPIO_Write(GPIOB,0x0ff);
  161.                         delay(2300);

  162.                 }
  163.           }        
  164.          }
  165. }               
復制代碼

求各位大佬幫忙指點一下

zhongduan.7z

60.28 KB, 下載次數: 6

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

使用道具 舉報

沙發
ID:401564 發表于 2022-4-27 16:54 | 只看該作者
使用STM32標準庫函數的話,所有中斷函數都是要在stm32f10x_it.c中編寫的,函數名也是固定好的你都沒有添加這個文件,自然就沒有中斷了
就幾個數碼管顯示,仿真干嘛呢,杜邦線一插,編譯燒錄不就完了
至于PA5的低電平,不知道,仿真的東西,也沒有用到這個端口,管它干嘛呢
我這有一個前些天學STM32的時候寫的,你參考一下,已經驗證過的
EXIT中斷.7z (209.88 KB, 下載次數: 8)

回復

使用道具 舉報

板凳
ID:995903 發表于 2022-4-27 17:00 | 只看該作者
謝謝,我是學習用的,沒有stm32的開發板,只有51的開發板,所以只能仿真。
回復

使用道具 舉報

地板
ID:401564 發表于 2022-4-27 20:56 | 只看該作者
單片機這種東西,實物不在手上,學習的進度是很慢的
STM32最小系統也可以用在8051的開發板上的,就是高低電平而已
自己買個板子和一個ST LINK就可以在線仿真了,這效果要比軟件仿真好很多
回復

使用道具 舉報

5#
ID:883242 發表于 2022-4-27 21:06 | 只看該作者
  1. void delay(u16 i)
  2. {
  3.         while(i--);        
  4. }
復制代碼


這里明顯有問題,C51默認用戶都是不懂volatile關鍵字的idiot。
在其他編譯器上會被優化掉
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲小视频在线播放 | 中文字幕视频在线 | 欧美综合自拍 | 91亚洲欧美 | 一级毛片,一级毛片 | 青娱乐国产 | 午夜视频在线播放 | 欧美日韩一区在线播放 | 日韩精品在线播放 | h视频免费观看 | 九九精品在线 | 二区中文 | 国产黄色一级电影 | 中文字幕乱码一区二区三区 | julia中文字幕久久一区二区 | 欧美电影免费观看高清 | 午夜精品久久久久久久久久久久久 | 在线观看视频91 | 久久精品青青大伊人av | 波多野结衣av中文字幕 | 99九九久久 | 99视频精品 | 精品久久久久久亚洲综合网 | 亚洲国产成人久久综合一区,久久久国产99 | 欧美美女爱爱 | 国产精品一区二区三区四区 | 日日夜夜精品免费视频 | 日韩欧美在线视频观看 | 久久久天堂 | 日韩精品在线看 | 精品国产乱码一区二区三区a | 欧美精品中文字幕久久二区 | 无码国模国产在线观看 | 91av国产在线视频 | 精品一区二区三区91 | 久久久久国产精品 | jlzzjlzz欧美大全 | 亚洲精品永久免费 | 国产伦一区二区三区四区 | 久久国产一区二区三区 | 国产97在线视频 |