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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32程序想把PA0改到PC10,PB1改到PC3 直接改可以嗎?

[復制鏈接]
跳轉到指定樓層
樓主
硬件為gp2y1014au0f這個pm2.5檢測模塊和STM32F103RCT6連接,硬件連接圖如圖所示;

現在因為PA0,PB1兩個IO口被占用,想把PA0改到PC10,PB1改到PC3,請問直接改是不是有影響,或者把PA0改到PA2也行,只能重定義嗎?希望大佬給出解決方案和代碼。

gp2y1014au0f.c代碼如下:
  1. #include "gp2y1014au0f.h"
  2. #include "delay.h"

  3. /*初始化ADC*/
  4. void  Adc_Init(void)
  5. {         
  6.         ADC_InitTypeDef ADC_InitStructure;
  7.         GPIO_InitTypeDef GPIO_InitStructure;

  8.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB |RCC_APB2Periph_ADC1        , ENABLE );          //使能ADC1通道時鐘


  9.         RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //設置ADC分頻因子6 72M/6=12,ADC最大時間不能超過14M

  10.         //PA1 作為模擬通道輸入引腳                        
  11.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  12.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                //模擬輸入引腳
  13.         GPIO_Init(GPIOA, &GPIO_InitStructure);        
  14.   
  15.         //PB1 作為脈沖輸出引腳   
  16.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                        
  17.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  18.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;           
  19.         GPIO_Init(GPIOB, &GPIO_InitStructure);
  20.         GP2Y_High;

  21.         ADC_DeInit(ADC1);  //復位ADC1,將外設 ADC1 的全部寄存器重設為缺省值

  22.         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;        //ADC工作模式:ADC1和ADC2工作在獨立模式
  23.         ADC_InitStructure.ADC_ScanConvMode = DISABLE;        //模數轉換工作在單通道模式
  24.         ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;        //模數轉換工作在單次轉換模式
  25.         ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //轉換由軟件而不是外部觸發啟動
  26.         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;        //ADC數據右對齊
  27.         ADC_InitStructure.ADC_NbrOfChannel = 1;        //順序進行規則轉換的ADC通道的數目
  28.         ADC_Init(ADC1, &ADC_InitStructure);        //根據ADC_InitStruct中指定的參數初始化外設ADCx的寄存器   

  29.   
  30.         ADC_Cmd(ADC1, ENABLE);        //使能指定的ADC1
  31.         
  32.         ADC_ResetCalibration(ADC1);        //使能復位校準  
  33.          
  34.         while(ADC_GetResetCalibrationStatus(ADC1));        //等待復位校準結束
  35.         
  36.         ADC_StartCalibration(ADC1);         //開啟AD校準

  37.         while(ADC_GetCalibrationStatus(ADC1));                 //等待校準結束

  38.         //        ADC_SoftwareStartConvCmd(ADC1, ENABLE);        //使能指定的ADC1的軟件轉換啟動功能
  39. }                                 
  40. //獲得ADC值
  41. //ch:通道值 0~3
  42. u16 Get_Adc(u8 ch)   
  43. {
  44.           //設置指定ADC的規則組通道,一個序列,采樣時間
  45.         ADC_RegularChannelConfig(ADC1, ch, 0, ADC_SampleTime_239Cycles5 );        //ADC1,ADC通道,采樣時間為239.5周期                                      
  46.   
  47.         ADC_SoftwareStartConvCmd(ADC1, ENABLE);                //使能指定的ADC1的軟件轉換啟動功能        
  48.          
  49.         while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待轉換結束

  50.         return ADC_GetConversionValue(ADC1);                //返回最近一次ADC1規則組的轉換結果
  51. }

  52. float GetGP2Y(void)
  53. {
  54.     u32 AD_PM;  
  55.           double pm;
  56.     GP2Y_Low;
  57.     delay_us(280);
  58.     AD_PM = Get_Adc(ADC_Channel_0);        //PA0
  59.     delay_us(40);
  60.     GP2Y_High;
  61.     delay_us(9680);
  62.     pm = 0.17*AD_PM-0.1; //轉換公式
  63.     //printf("%f\n",pm);
  64.         return pm;
  65. }

  66. u16 Get_GP2Y_Average(u8 times)
  67. {
  68.         u32 pm_val=0;
  69.         u8 t;
  70.         for(t=0;t<times;t++)
  71.         {
  72.                 pm_val+=GetGP2Y();
  73.                 delay_ms(5);
  74.         }
  75.         return pm_val/times;
  76. }

復制代碼
gp2y1014au0f.h代碼如下:
  1. #ifndef __GP2Y1014AU0F_H
  2. #define __GP2Y1014AU0F_H        
  3. #include "sys.h"

  4. #define GP2Y_High GPIO_SetBits(GPIOB,GPIO_Pin_1);
  5. #define GP2Y_Low  GPIO_ResetBits(GPIOB,GPIO_Pin_1);

  6. float GetGP2Y(void);
  7. void Adc_Init(void);
  8. u16  Get_Adc(u8 ch);
  9. u16 Get_GP2Y_Average(u8 times);

  10. #endif

復制代碼

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

使用道具 舉報

沙發
ID:123289 發表于 2022-3-8 15:07 | 只看該作者
寫程序時,盡量不要將端口符號直接寫入程序中,如:PA0 = 0
而要先定義一個符號來替代端口號:如,定義:XLED3 = PA0。
如此,在程序中將 PA0 = 0 改寫成 XLED3 = 0,就可以了。
這樣做的好處是:當你將LED3改接到 PC5之后,程序只要改動一個地方,
那就是 XLED3 = PA0,改成 XLED3 = PC5,程序中所有地方都不要動。
回復

使用道具 舉報

板凳
ID:692206 發表于 2022-3-8 15:41 | 只看該作者
yzwzfyz 發表于 2022-3-8 15:07
寫程序時,盡量不要將端口符號直接寫入程序中,如:PA0 = 0
而要先定義一個符號來替代端口號:如,定義:X ...

這個我知道大佬,現在的問題就是因為PA1有特殊的復用功能,直接改端口貌似不行,我想問下是不是可以直接改成別的端口。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久日韩精品一区二区三区 | 久久午夜电影 | 毛片视频免费 | 国产精品视频一区二区三区不卡 | 欧美一区二区免费 | 久久这里只有精品首页 | 日韩精品一区二区三区在线播放 | 在线欧美一区 | 国产在线中文字幕 | 国产91久久精品一区二区 | 欧美精品成人一区二区三区四区 | 亚洲欧洲精品成人久久奇米网 | 欧美啊v在线观看 | 91久久精品| 久久久久亚洲av毛片大全 | 婷婷中文在线 | 亚洲人的av | 国产一区二区电影网 | 一区二区高清不卡 | 久久久精品一区 | 日韩高清一区二区 | 国产又色又爽又黄又免费 | 久久久看| 国产精品观看 | 色久伊人| 亚洲精品电影网在线观看 | 97久久久久久久久 | 曰韩一二三区 | h片免费在线观看 | 日韩国产精品一区二区三区 | 天天操夜夜操 | 婷婷丁香在线视频 | 亚洲精品99| 国产大学生情侣呻吟视频 | 91偷拍精品一区二区三区 | 国产精品91视频 | 成人精品一区 | 在线视频一区二区三区 | www.黄色在线观看 | 国产韩国精品一区二区三区 | 羞羞色在线观看 |