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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32F103用ADC獲取了數值寫入SD遇到問題,求教

[復制鏈接]
跳轉到指定樓層
樓主
ID:987386 發表于 2022-2-3 00:28 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
大神老師好,我要弄個ADC獲取傳感器的數值,然后寫入到SD卡里,現在郁悶,單獨運行ADC可以成功獲取,單獨運行SD卡可以運行寫入數據,但合在一起就開始卡死,直接沒反應,小白一名,剛開始學習單片機,是少了步驟還是哪里問題。求教!!!
  1. #include "system.h"
  2. #include "SysTick.h"
  3. #include "usart.h"
  4. #include "adc.h"
  5. #include "oled.h"
  6. #include "bmp.h"
  7. #include "ff.h"
  8. #include "bsp_spi_sdcard.h"
  9. #include "stdio.h"

  10. FATFS fs;                                                                                                        /* FatFs文件系統對象 */
  11. FIL fnew;                                                                                                        /* 文件對象 */
  12. UINT fnum;
  13. FRESULT res_flash;                /* 文件操作結果 */

  14. #define PRESS_MIN        20
  15. #define PRESS_MAX        8000
  16. //壓力范圍設定


  17. #define VOLTAGE_MIN 100
  18. #define VOLTAGE_MAX 3300
  19. //電壓范圍設定

  20. u8 state = 0;
  21. u16 val = 0;
  22. u16 value_AD = 0;
  23. u8 buf[10];

  24. long PRESS_AO = 0;
  25. int VOLTAGE_AO = 0;

  26. long map(long x, long in_min, long in_max, long out_min, long out_max);

  27. void Writer_Press_AO(long press_ao,u8 ad_number)
  28. {
  29.         u32 time_get_temp;
  30.         char filename[20];
  31.         char writerbuff[40];
  32.         res_flash = f_mount(&fs,"0:",1);
  33.         if(res_flash == FR_OK)
  34.         {
  35.                 printf("》初始化成功。\r\n");
  36.         }
  37.         else
  38.         {
  39.                 printf("》初始化失敗。錯誤號:%d\r\n",res_flash);
  40.         }
  41.         time_get_temp = get_fattime();
  42.         printf("》時間戳:%d\r\n",time_get_temp);
  43.         sprintf(filename,"0:date%d.txt",time_get_temp);
  44.         printf("》文件名:%s\r\n",filename);
  45.         res_flash = f_open(&fnew,filename,FA_OPEN_ALWAYS | FA_WRITE );
  46.         if(res_flash == FR_OK)
  47.         {
  48.                 printf("》打開文件成功。\r\n");
  49.         }
  50.         else
  51.         {
  52.                 printf("》打開文件錯誤。錯誤號:%d\r\n",res_flash);
  53.         }
  54.         f_lseek(&fnew, f_size(&fnew));
  55.         sprintf(writerbuff,"time:%d ad:%d press_ao:%ld\r\n",time_get_temp,ad_number,press_ao);
  56.         printf("》記錄值,時間:%d,端口%d:,壓力值:%d\r\n",time_get_temp,ad_number,press_ao);
  57.         if ( res_flash == FR_OK )
  58.         {
  59.                 printf("》打開/創建文件成功,向文件寫入數據。\r\n");               
  60.                 res_flash=f_write(&fnew,writerbuff,sizeof(writerbuff),&fnum);
  61.                 if(res_flash==FR_OK)
  62.                 {
  63.                         printf("》文件寫入成功,寫入字節數據:%d\n",fnum);
  64.                         printf("》向文件寫入的數據為:\r\n%s\r\n",writerbuff);
  65.                 }
  66.                 else
  67.                 {
  68.                         printf("》!!文件寫入失敗:(%d)\r\n",res_flash);
  69.                 }   
  70.         }
  71.         f_close(&fnew);       
  72.         f_mount(NULL,"0:",1);
  73. }

  74. long Get_Adc_Press_Ao(u8 adc_port)
  75. {
  76.         value_AD = Get_Adc_Average(adc_port,10);        //10次平均值
  77.         VOLTAGE_AO = map(value_AD, 0, 4095, 0, 3300);
  78.         if(VOLTAGE_AO < VOLTAGE_MIN)
  79.         {
  80.                 PRESS_AO = 0;
  81.         }
  82.         else if(VOLTAGE_AO > VOLTAGE_MAX)
  83.         {
  84.                 PRESS_AO = PRESS_MAX;
  85.         }
  86.         else
  87.         {
  88.                 PRESS_AO = map(VOLTAGE_AO, VOLTAGE_MIN, VOLTAGE_MAX, PRESS_MIN, PRESS_MAX);
  89.         }
  90.        
  91.         return PRESS_AO;
  92. }


  93. int main()
  94. {
  95.         u8 i;
  96.         long result;
  97.         u32 time_get_temp;
  98.         char filename[20];
  99.         char writerbuff[40];
  100.         char* adc_temp;
  101.         SysTick_Init();
  102.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  //中斷優先級分組 分2組
  103.         USART1_Init(9600);
  104.         Adc_Init();
  105.         OLED_Init();
  106.         OLED_ColorTurn(0);//0正常顯示,1 反色顯示
  107.   OLED_DisplayTurn(1);//0正常顯示 1 屏幕翻轉顯示
  108.         OLED_Refresh();
  109.         delay_ms(1000);
  110.         OLED_ShowChinese(9,14,0,16);
  111.         OLED_ShowChinese(27,14,1,16);
  112.         OLED_ShowChinese(45,14,2,16);
  113.         OLED_ShowChinese(63,14,3,16);
  114.         OLED_ShowChinese(81,14,4,16);
  115.         OLED_ShowChinese(99,14,5,16);
  116.         OLED_ShowChinese(9,36,6,16);
  117.         OLED_ShowChinese(27,36,7,16);
  118.         OLED_ShowChinese(45,36,8,16);
  119.         OLED_ShowChinese(63,36,9,16);
  120.         OLED_ShowChinese(81,36,10,16);
  121.         OLED_ShowChinese(99,36,11,16);
  122.         OLED_Refresh();
  123.         delay_ms(1000);
  124.         delay_ms(1000);
  125.         OLED_Clear();
  126.                
  127.        
  128.         while(1)
  129.         {
  130.                 for(i=0;i<4;i++)
  131.                 {
  132.                         result = Get_Adc_Press_Ao(i);
  133.                         sprintf(adc_temp,"AD%d:",i+1);
  134.                         OLED_ShowString(0,i*16,adc_temp,16);
  135.                         OLED_ShowNum(40,i*16,result,4,16);
  136.                         OLED_ShowString(80,i*16,"g",16);
  137. <span style="background-color: lemonchiffon;">                        if(result == 8000)                //就是這個if調用后就不正常了,注釋后OLED正常顯示獲取的AD值,我想要的是當換算出來的AD值達到8000后,把這個記錄寫入到SD卡的TXT中
  138.                         {
  139.                                 Writer_Press_AO(result,i);
  140.                         }</span>
  141.                         OLED_Refresh();
  142.                         delay_ms(1000);
  143.                 }
  144.                
  145.         }
  146. }

  147. long map(long x, long in_min, long in_max, long out_min, long out_max) {
  148. return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
  149. }

復制代碼

求教!!!標黃了這個if語句,注釋后OLED就能正常顯示運行,有這個就卡死,單獨運行SD寫入程序也是正常,求教了



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

使用道具 舉報

沙發
ID:987386 發表于 2022-2-4 02:54 | 只看該作者
謝謝各位老師,事情自己解決了,但又碰到點小問題,不知道要怎么處理,還沒想好怎么形容我想要的東西,等著總結好了咨詢
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美又大粗又爽又黄大片视频 | 国产精品日韩欧美一区二区 | 三级视频在线观看电影 | 国产精品国色综合久久 | 超碰97人人人人人蜜桃 | 天天射天天操天天干 | 国产精品综合一区二区 | 久久国产精99精产国高潮 | 91视频久久久久 | av三级在线观看 | 亚洲91精品 | 日韩在线视频免费观看 | 日本爱爱 | 亚洲一区二区国产 | 欧美一级二级在线观看 | 国产精品国产精品国产专区不卡 | 久久国产福利 | 天天拍天天操 | 中文字幕在线三区 | 在线中文字幕第一页 | 国产日韩一区二区三区 | 在线一区二区三区 | 特黄一级| 91夜色在线观看 | 狠狠躁夜夜躁人人爽天天高潮 | 在线免费av电影 | 男女羞羞视频免费看 | 亚洲欧洲色视频 | 日韩成人免费 | 在线91| 国产欧美精品一区二区色综合 | 婷婷精品 | 做a视频在线观看 | 日韩一区二区三区视频 | a级毛片免费高清视频 | 国产福利资源 | 亚洲精品久久久久久久久久久久久 | 国产精华一区 | 国产91丝袜在线播放 | 欧美一级黄带 | 日韩在线小视频 |