<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

      1. 專注電子技術學習與研究
        當前位置:單片機教程網 >> STM32 >> 瀏覽文章

        漫談stm32的GPIO

        作者:佚名   來源:轉自X弓雖   點擊數:  更新時間:2014年08月30日   【字體:

        在網上看到的一遍文章,覺的不錯,分享給大家

        單片的輸入輸出不叫GPIO,僅僅是個io,稍微復雜點的就是串口,至于后面那些增強的1t的帶da的單片機,都不屬于入門學習范圍.那些東西都是為了低成本而存在,對學習沒有任何作用.只要初學者入門了,所有片內外設都非常簡單的搞定.本文是一片基礎學習文章.入門者的精神食糧.

        理解gpio不僅僅是會配置寄存器,因為好多人根本不知道寄存器如何配置.如果不信的話那回答我這個問題,stm32的io頻率到底該配置成多少Mhz?

        上面這張圖是來自stm32的中文版手冊.我對這些模塊進行了簡單的標注.下面我就從外到內進行分析信號的流向以及每一部分存在/屏蔽的意義.

         

        先看上半部分,就是io的I,input,輸入功能.信號從io引腳流入,首先被保護二極管q/r進行鉗位.那就舉一個例子,假定vdd是3.3v,那么二極管有0.7v的壓降,那么io引腳的高電平就不能超過3.3+0.7v=4v只要超過4v那么就會有很大的電流從保護二極管流過,信號的內阻就會承擔比較大的電壓,使io引腳的電壓最高鉗位到4v.上面分析的是對于過高的電平.q二極管導通.r二極管關閉,所以不用分析.對于io出現負電壓,這個時候q二極管是關閉的需要分析下面的r二極管.r二極管保持io引腳電平不低于vss-0.7v.至于為什么會出現這種情況,暫時不做分析,如果你看過示波器的振鈴信號.就明白了.給大家留一個問題,如何消除振鈴信號?

        對于正常的數字信號,就進入了o/p電阻的控制范圍.上下拉電阻的作用又是什么,什么時候需要上下拉? 上拉電阻就是在信號和vdd直接接引ig電阻,經驗值在10k左右.對于一個5v的信號,能夠最大提供0.5ma的電流.首先聊一個開漏輸出,就是iic使用的信號.這種信號的兩個狀態是Z高阻態和0低電平,無法提供高電平的.加入一個上拉電阻,就能在z態的時候,信號線為高電平vdd, 0態的時候信號線為0.上拉電阻承擔整個vdd電壓.也就是說z態的時候上拉電阻無電流通過,功耗基本為0,而0態的時候上拉電阻功率為vdd*vdd/r,在低功耗設計的時候這一個電阻的功耗需要考慮.默認狀態需要保持電阻在功耗0的狀態.當然對于stm32這種片內控制的上下拉,直接關掉,讓其浮空.就會降低功耗.但是有可能信號也失去了意義無法喚醒cpu.慎重嚴肅考慮.上拉電阻的意義就是給總線灌入一定電流,提高總線從0到1跳變的速度.有些信號驅動能力不足的時候,會提供信號的高電平驅動能力.包括電壓和電流.相反,減緩了下降沿的速度,降低了低電平的驅動能力.在設計的時候多用歐姆定律計算.包括功耗.電阻究竟該用多大.

         

         

        K元件,呵呵.這個是個很有意思的東西.其實這里的每一個元件都有意思,否則 2個電阻2個二極管就不需要寫上面的兩大段了.首先名稱是ttl肖特基觸發器,不就是個帶門限的觸發器嘛.首先ttl是指他的參考是ttl電平不是cmos電平,這里寫詳細了大家也會混亂.ttl電平我解釋一下,TTL輸出高電平>2.4V,輸出低電平<0.4V。最小輸入高電平和最大輸入低電平:輸入高電平>=2.0V,輸入低電平<=0.8V,噪聲容限是0.4V。也就是說b模擬輸入,是直接從io引入,并且與c數字部分進行了隔離.數字部分使用ttl電平的觸發器進行了緩沖,這個緩沖有時候也被稱為buff,但是buff并不全是觸發器.觸發器的延時在5-10ns之間.當然i和c會同時獲取ttl肖特基觸發器的輸出,觸發器也對信號的驅動能力進行了提高,至于是c還是d來消費掉這個信號,就看你io配置成什么功能了.

         

        對于GPIO的o, output,就從左向右進行分析.首先是信號的生成,其一是寄存器,由cpu來操作.e和f共兩種操作,e是單次操作只能設置寄存器的某些位為1,或者清除某些位為0,影響部分bit,而f是直接將輸出寄存器改變,影響 全部bit.對于j是硬件控制器自動生成信號流,這里就不用詳述了.控制輸出前面的梯形是選擇器,選擇其中的一路有效.無效的一路cpu也可以操作.但是毫無意義.很多人都是在這個坑里出不來,我做了一些操作,但是io不聽話.對于控制輸出和m/n兩個管子共同生成高低電平的切換.當然,這里會有一個死區控制.別看這芯片原理圖這么畫,就認為是這么簡單設計.如果用橋電路控制電機就會掉坑里.因為圖上的控制框是有死區控制的.并且能控制好.控制不好就會出現跳變的時候io功率很大.對于電機橋電路來說.就是直接燒壞驅動芯片.做輸出的時候,上下拉電阻都是斷開的.但是保護二極管沒有斷開.這里提出一個問題,雖然是輸出,信號會過充嗎?大家自己去考慮.

         

        寫道這里,圖解gpio就結束了.把中間的兩個復雜的問題總結一下答案.

        1. 振鈴信號 2.gpio的頻率

        振鈴信號是因為電路的阻抗匹配出問題導致.也就是信號線上的電感和電容導致了信號的震蕩.這個震蕩與信號的跳變間隔基本無關.但跳變間隔長的信號,對振鈴不敏感而已.因為他們有更多的采樣時間.在工業級總線上可以多次采樣求平均值來扛干擾.震蕩信號與跳變的邊沿有關.跳變邊沿的頻率約為信號反轉頻率的10倍.就是一個1k的串口信號,跳變頻率大約在10k級別.所以2.gpio的頻率是1振鈴信號的產生原因之一.既然是之一,那么,就可以通過修改它來減少振鈴信號.提高信號的穩定程度.并且減少干擾.那么對于小于200K的時鐘來說,設置2M時鐘即可.對于小于1M的信號,設置10M輸出即可.對于5M以下的信號,設置50Mhz,對于5M以上的信號,也只能設置50Mhz,這時候,你要去考慮信號邊沿的斜率是不是能滿足你的需要了.例如io頻率在48M的時候,波形可能已經不是漂亮的方波了.但是不代表這個信號是不能用的.要看你的接收方是不是認可這種信號.當然,這里我也不用多說了,遇到這種問題的人,都知道如何解決.只不過沒法找到萬能的解決辦法.

         

        關閉窗口
        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮