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

標題: STM32程序想把PA0改到PC10,PB1改到PC3 直接改可以嗎? [打印本頁]

作者: lx20000904    時間: 2022-3-7 19:51
標題: 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

復制代碼


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

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

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




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久久国产精品 | 亚洲精品一区中文字幕乱码 | 嫩草视频网站 | 日韩av在线一区 | 91九色在线观看 | 中文天堂在线一区 | 亚洲国产一区二区三区在线观看 | 国产免费福利 | 天天草草草 | www.色53色.com | 欧美一区二区三区在线看 | 国产一区在线免费观看 | 欧美日韩亚洲一区 | 成人精品鲁一区一区二区 | 日韩免费福利视频 | 亚洲伊人精品酒店 | 九九热久久免费视频 | 懂色av色香蕉一区二区蜜桃 | 国产在线精品免费 | 日韩欧美精品一区 | 午夜精品一区 | 欧美一级二级视频 | www.三级 | 黄色在线免费观看 | 欧美在线视频一区二区 | 亚洲v区 | 欧美区在线 | 国产精品久久久久久久久久三级 | 久久精品久久久久久 | 国产一区在线免费 | 亚洲精品短视频 | 欧美九九 | 亚洲美女在线一区 | 第一色在线 | 91视频在线 | 亚洲精品视频免费观看 | 国产99视频精品免费播放照片 | 欧美日韩在线免费观看 | 91成人| 国产高清久久 | 精品九九 |