1. 程式人生 > >中科之旅------GD32 /stm32過程中遇到的問題

中科之旅------GD32 /stm32過程中遇到的問題

1.GD32 gpio配置問題,pc7作為timer7_ch1

在GD32F303xx_Datasheet_Rev1.2裡看到

而在GD32F30x_User_Manual_CN_V1.1裡則找不到一點pc7的資料,所以認為,由於這個gpio沒有remap的功能,所以GD32F30x_User_Manual_CN_V1.1裡就不特別說了,而如果要複用哪個功能就得先使能那個功能模組。

2.一開始不知道GD32的中斷函式定義在哪,原來在

C:\Users\Administrator\Desktop\ZKSS\GD32系列開發\GD32303C_START_GD32F30x_Firmware_Library_Routine_ANC\GD32303C_START_GD32F30x_Firmware_Library_Routine\Project\2_Systick_LED\MDK-ARM\list\GD32303C_START.map中。

3.GD32 DAC如何確定輸出電壓?

如果選擇8位的DAC,那麼最大值就是2的8次,對應3.3v,如果是選擇12位的DAC,那麼最大值就是2的12次,最大電壓同樣是3.3v

4.DAC 和DMA繫結,我用DMA ch1去繫結DAC1,發現不行直到看了這個圖

改用ch3搞定

4.用DAC+DMA功能的時候,DMA那邊配置為DMA_PERIPHERAL_WIDTH_32BIT的時候,出現了奇怪的現象,DAC只能8bit有效,哪怕地址是R12的地址,只有用DMA_PERIPHERAL_WIDTH_16BIT的時候才是12位地址有效

6.EEPROM一直讀不出正確值,看了spec發現

This pin must be connected to either VSS or VCC. If tied
to VSS, write operations are enabled. If tied to VCC,
write operations are inhibited but read operations are
not affected
 

5.用ADC自帶的測溫度功能,發現ADC0可以,ADC1不行,查了手冊

然後問了技術支援確認只有ADC0可以

6.之前參考example裡的running_led去操作gpio發現不對,看了資料手冊發現

原來這裡才是拉高拉低的正確方式

7.gd32 f303的can的波特率計算有問題

雖然資料手冊上是

然而最後算下來,其實真正波特率是這個的1/2,。。。。。,而且誤差必須控制在千分之5,比如500k的要求要千分之4左右

7.

gd405工程編譯遇到錯誤就把這些檔案拷到這個目錄即可

9.

新增#include <stdio.h>

10.

遇到這個問題,就重灌keil到c盤然後把patch也放在keil目錄下安裝,安裝目錄也選擇c盤的keil已經安裝好的目錄即可

11.gd32f405設定gpio為output高電平,用他的庫函式

gpio_mode_set(RCU_GPIOC, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_8);
    gpio_output_options_set(RCU_GPIOC, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ,GPIO_PIN_8);

    GPIO_BC(RCU_GPIOC) = GPIO_PIN_8;
    GPIO_BOP(RCU_GPIOC) = GPIO_PIN_8;居然連output都設定不了簡直垃圾,提醒大家千萬注意gd的庫錯誤巨多

後來改用

    GPIO_CTL(GPIOC) = 0x10000;
    GPIO_PUD(GPIOC) = 0x20000;
    GPIO_OCTL(GPIOC) = 0x100;直接寫才行了

12.配置PLLN的時候務必注意下圖

我之前設定了24結果無效,難怪串列埠的設定的波特率係數和計算的差一倍。然而後續太狗血了,哪怕plln有效,波特率依然要除以2

13.在ADC使用DMA功能的時候要注意

void adc_dma_mode_enable(uint32_t adc_periph)
{
    ADC_CTL1(adc_periph) |= (uint32_t)(ADC_CTL1_DMA);
    ADC_CTL1(adc_periph) |= (uint32_t)(ADC_CTL1_DDM); 一定要使能這個,因為原來的庫函式裡不使能,而且資料手冊很坑爹
}

該死不死寫什麼單次模式,其實掃描模式也要使能

14,關於管腳複用

15.gd的startup.s中可能會漏中斷

少了64號中斷

導致我的DMA中斷一直卡在default handler中。。。。。因為本來72的中斷向量變成了71.。。。

16.之前303的DMA中斷正常,但是405不行,後來發現

405還要設定這個PERIENN。而303不用

17.中斷裡用計數迴圈的話變數要定義成全域性變數,這樣會保持之前的值

18.keil配置gd405的時候

要選中這個ic才行,不能只選STM32F405這個大類

19.讀gpio狀態,雖然預設設定是輸入,但是時鐘一定要開起來

 rcu_periph_clock_enable(RCU_GPIOA);

20.i2s開發遇到的問題

首先是時鐘,可以選sysclk分頻,也可以選外接到I2S_CKIN引腳,然後需要在rcu那邊設定一下

還有個問題就是DMA和i2s直通,由於我配置的不是i2s1_add而是spi1,所以DMA這邊通道要選

通道4的功能0而不是功能2

還有spi那邊要把

傳送緩衝區DMA使能


21.如果要把jtdi複用成spi cs,先改複用暫存器,然後改成output模式即可

22.如果想要把一個char型別的陣列轉換成浮點數

typedef union 
{
int m;
float f;
}fnum;

    d.m = 0x3e800000;
    

d.f就是浮點數但是直接給d.f 0x3e800000賦值則不行。

23.如果想要獲取DMA2stream2的完成中斷

void DMA2_Stream2_IRQHandler(void)  
{
  if(DMA_GetITStatus(DMA2_Stream2, DMA_IT_TCIF2)) //一定要注意DMA_IT_TCIF2這個要和stream對應上
      {
     for(i = 0; i < 4; i++)
                    {
                    tmp = ad_buff_a[i]*gain[i];
                    ad_buff_a[i] = tmp;
                    }

               //printf("%d\n",ad_buff_a[0]);
               set_dac1_out(ad_buff_a[0]);;
               set_dac2_out(ad_buff_a[1]);
               set_compare(1,ad_buff_a[2]);
               set_compare(2,ad_buff_a[3]);
               set_adc_finish = 1;
        
         DMA_ClearITPendingBit(DMA2_Stream2, DMA_IT_TCIF2);
      }
}

24.DAC如果輸出幅值和預期相比較小的話,是因為outputbuffer沒有使能的緣故

25.ADC的RCC reset要注意

 

注意這個是所有ADC共用的,所以只要reset一次,千萬要注意不要重複reset

26.如果要從上位機往下傳資料,由於串列埠的資料型別是char,但是下位機需要float型別,那麼用這個辦法也不錯

假設我將uart的資料存在data指向的陣列中,那麼我的freq_data是一個包含float型別資料的結構體

struct freq_struct
{
    float  H_threshold;
    float  L_threshold;
   struct   para_conf_t freq_single[6];
};那麼直接copy進去即可,當然要注意資料的大小端問題

memcpy((unsigned char*)(&freq_data) + num_para,data,len);

相關推薦

中科------GD32 /stm32過程遇到的問題

1.GD32 gpio配置問題,pc7作為timer7_ch1 在GD32F303xx_Datasheet_Rev1.2裡看到 而在GD32F30x_User_Manual_CN_V1.1裡則找不到一點pc7的資料,所以認為,由於這個gpio沒有remap的功能,所以

中科------GD32 /stm32/mpc5604過程遇到的問題

1.GD32 gpio配置問題,pc7作為timer7_ch1 在GD32F303xx_Datasheet_Rev1.2裡看到 而在GD32F30x_User_Manual_CN_V1.1裡則找不到一點pc7的資料,所以認為,由於這個gpio沒有remap的功能,所以GD32F30x_

中科------開發PIC16F18855過程遇到的困難以及解決方案

一來讓自己可以回顧開發歷程,二來幫助後來者快速上手,知識總是需要共享才有價值。 1.遇到了無法解析識別符號 解決方法:我的專案之前建立在c盤admin下面,後來換到D盤全英文目錄下就沒有報錯可以正常通過編譯了。   2.SSP1CON2 = SSP1CON2 | bit0;

中科------C#開發遇到的問題

1.在用USB2XXX_Example來做二次開發的時候遇到了找不到usbxxx.dll後來詢問客服得知,將C:\Program Files\USB2XXX\USB2XXX Software目錄下的libusb-1.0.dll和USB2XXX.dll放到 G:\zkss20181016\c#\s

我的Android進階------&gt;Androidandroid:windowSoftInputMode的使用方法

onf ecif 標簽 ear evel per another not 行為 面試題:怎樣在顯示某個Activity時馬上彈出軟鍵盤? 答案:在AndroidManifest.xml文件裏設置<activity>標簽的android:win

一個博客萌新的C語言(持續更新....)

方便 流程 函數聲明 語言 tex 表達 賦值語句 當前 寫在前面 先更新上一次留下的的C語言練習答案,如下: #include <stdio.h> double mj(double r) { return 3.14*r*r; } int main() { i

一個部落格萌新的C語言(持續更新....)

先更新上一次留下的的C語言練習答案,如下: #include <stdio.h> double mj(double r) { return 3.14*r*r; } int main() { int r; double s; r=3; s=mj(r); printf("%f",s); }

中科------matlab生成wav檔案和解析wav檔案

生成wav: % 生成時間序列 fs = 5000;      % [Hz] 訊號取樣頻率 T = 1;          % [s] 訊號長度  x = 0:1/fs:T;   % [s] 時間序列   % 生成訊號序列 f = 440;        % [Hz] 訊號

學習stm32過程遇到的問題(還有部分是Altium Designer)

問題:在註釋遇到意外的檔案結束 注意事項:很多帶“_s”字尾的函式是為了讓原版函式更安全,傳入一個和引數有關的大小值,避免引用到不存在的元素,有時黑客可以利用原版的不安全性黑掉系統。比如:char d[20];寫成scanf_s("%s",d,20);才是正確的,有這個引數

VUE 爬坑 -- 在 VUE 專案使用 ECharts 畫 K 線圖和麵積圖,並且可切換

現在的專案中需要做一個K線圖的功能,花了幾天時間查資料,讀文件,總算是基本搞定了,下面把這過程中一些需要注意的點記下來,以備不時之需。需要達到的效果如下: 說到做圖表,現在的成熟的解決方案就是百度的 ECharts 了,功能強大齊全,文件詳細,用的人多

Android逆向---基於對so的section加密技術實現so加固

致謝:一、前言好長時間沒有更新文章了,主要還是工作上的事,連續加班一個月,沒有時間研究了,只有週末有時間,來看一下,不過我還是延續之前的文章,繼續我們的逆向之旅,今天我們要來看一下如何通過對so加密,在介紹本篇文章之前的話,一定要先閱讀之前的文章:so檔案格式詳解以及如何解析

中科-------PIC16F18855 i2c初始化

管腳初始化 void PIN_MANAGER_Initialize(void){LATB = 0x03; //RB4 init value 0  0000 0010  MOSI MISO SS = 0 ,SLCK = 1;    LATA = 0x0;&nb

中科-------PIC16F18855 SPI初始化

void PIN_MANAGER_Initialize(void) { LATB = 0x03; //RB4 init value 0  0000 0010  MOSI MISO SS = 0 ,SLCK = 1;     LATA = 0x0;

中科------T3G功能的實現

功能要求: 用RC0管腳測量一個pwm訊號的週期長度。 遇到的問題及解答: 問題1:GGO/DONE bit  的作用 看spec406頁,其實這個bit可以控制GIF中斷訊號,哪怕是單次測量,當你測量完一次後將這個bit清零然後重新置位,就又可以繼續測量了。 問題

AndroidCamera預覽過程插拔攝像頭節點後移

現象: 在使用Camera Preview時;熱插拔攝像頭會導致裝置節點由/dev/video0變為/dev/video1,或者插入多個video裝置時,會變為/dev/video1、/dev/video2......。 一、首先看裝置節點的建立 drivers/media

Android逆向---基於對so的函式加密技術實現so加固

致謝:一、前言今天我們繼續來介紹so加固方式,在前面一篇文章中我們介紹了對so中指定的段(section)進行加密來實現對so加固這篇文章我們延續之前的這篇文章來介紹一下如何對函式進行加密來實現加固,當然這篇文章和前篇文章有很多類似的地方,這裡就不做太多的解釋了,所以還請閱讀

stm32學習錯誤匯總(僅僅就我學習過程所遇到的)

com 支持 解決 bug 9.png ash cpu .cn src 1.Error:Flash Download Failed-"Cortex-M3" 出現這處問題通常是MDK中的Flash的編程算法沒有配置或沒有配置正確,通俗的講,就是我們沒有配置好下載的環境,導致程

facenet採坑,主要記錄一些用facenet過程遇到的大大小小的問題

問題1:Unable to run align_dataset_mtcnn.py getting an attribute error module ‘facenet’ has no attribute ‘store_revision_info’ 使用anaconda的環境,將facen

GitLab安裝過程及安裝過程問題解疑(安裝過程參照光子CI

本文主要參考文件:https://github.com/gitlabhq/gitlabhq/blob/5-0-stable/doc/install/installation.md Debian/Ubuntu主要參考https://github.com/gitlabhq/gi

我的Android進階------&gt;怎樣在多個LinearLayout加入分隔線

lai tex pre draw white 方法 utf == 技術分享 假設要適合於全部的Android版本號,能夠在多個LinearLayout放置用於顯示分隔線的View。比如,放一個ImageView組件。然後將其背景設為分隔線的顏色或圖像,分隔線