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

標題: stm32f103r6單片機的中斷程序 PA5也莫名其妙的是低電平? [打印本頁]

作者: lwanwan    時間: 2022-4-27 15:20
標題: 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


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


作者: lwanwan    時間: 2022-4-27 17:00
謝謝,我是學習用的,沒有stm32的開發板,只有51的開發板,所以只能仿真。
作者: Y_G_G    時間: 2022-4-27 20:56
單片機這種東西,實物不在手上,學習的進度是很慢的
STM32最小系統也可以用在8051的開發板上的,就是高低電平而已
自己買個板子和一個ST LINK就可以在線仿真了,這效果要比軟件仿真好很多
作者: Hephaestus    時間: 2022-4-27 21:06
  1. void delay(u16 i)
  2. {
  3.         while(i--);        
  4. }
復制代碼


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




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 精品91久久 | 久久不卡| 免费观看一级视频 | 日韩综合在线 | 瑟瑟免费视频 | 亚洲精品久久久 | 久草新在线 | 伊人网站在线观看 | 毛片a级毛片免费播放100 | 国产激情在线 | 国产日韩精品一区 | а天堂中文最新一区二区三区 | 一级黄色夫妻生活 | 成人在线观看网站 | 国产精品色av | 九九热在线免费视频 | 最新免费视频 | 伊人春色成人网 | 亚洲第一在线 | 99视频在线免费观看 | 国产一区影院 | 亚洲欧美激情精品一区二区 | 成人午夜影院 | 欧美成人精品 | 欧美一区 | 中文字幕一区二区三区乱码图片 | 久久国产精品一区二区三区 | 日韩国产三区 | 国产精品视频网站 | 91视视频在线观看入口直接观看 | 午夜精品影院 | 国产在线精品一区二区三区 | 激情婷婷成人 | 久久精品免费 | 免费欧美视频 | 亚洲成a人片 | 亚洲成人免费网址 | 婷婷激情综合 | 5060网一级毛片 | 亚洲精品在线看 | a欧美 |