<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > STM32 復(fù)用 與 重映射(USART Remap)

          STM32 復(fù)用 與 重映射(USART Remap)

          作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
          大家好,從今天開始.本人將自己在工作中遇到的問題 和學(xué)習(xí)體會 跟大家一起分享并探討.下面跟大家說一下STM32單片機的端口重映射,因為是以自己為實例.這里是以USART1的重映射為例..

          因為我要一個TFT_LCD屏的主控板,考慮到FSMC 我選用了STM32F103VCT6 型號的CPU,一不小心串口接到USART1上了.因為在調(diào)程序時才發(fā)現(xiàn)錯了,沒得辦法,只能通過端口重映射來解決.但是以前沒用過端口重映射,只聞其名,未用其身,所以..呵呵 ...只能從頭去看了.

          本文引用地址:http://www.ex-cimer.com/article/201611/316279.htm

          STM32上有很多I/O口,也有很多的內(nèi)置外設(shè)想I2C,ADC,ISP,USART等 ,為了節(jié)省引出管腳,這些內(nèi)置外設(shè)基本上是與I/O口共用管腳的,也就是I/O管腳的復(fù)用功能。但是STM32還有一特別之處就是:很多復(fù)用內(nèi)置的外設(shè)的I/O引腳可以通過重映射功能,從不同的I/O管腳引出,即復(fù)用功能的引腳是可通過程序改變的.讀到這里相信大家都應(yīng)該了解了端口重映射的一些概念了.原理上的東西不細說了,大家可以看手冊或者網(wǎng)上查,這方面的資料還是很多的.下面說說我的調(diào)試經(jīng)歷.

          上面說過,我用的CPU是STM32F103VCT6 ,說到這兒跟大家提一個小插曲.當時在老板讓我換方案也就是CPU時,只說用VC的CPU,讓我把要買的CPU告訴負責買器件的人,由于我是第一次做,所以傻乎乎的寫了張紙給了對方.內(nèi)容是"STM32F103VC 10PCS"對方看了一眼就給我退了回來并加一句"型號不對,沒寫全".我沒明白,便也不好繼續(xù)問白癡問題,所以跑網(wǎng)上查,原來光這個CPU就不止一種.我們選用的是T6也就是LQFP封裝的 工作環(huán)境為-40C -- 80C.所以說大家以后小心點兒 ..言規(guī)正傳.不知道是什么原因 PCB制圖時把串口接到USART1上了,當時也沒在意,等我把USART測試程序?qū)懞脽M去硬件仿真時,串口給的是亂碼,我當時就覺得奇怪.把程序檢查了好幾遍就是查不出問題來,以為是硬件有問題,但突然想到了STM有復(fù)用功能,心想會不會是這里有鬼?于是找來datasheet 一看 ,真相大白


          三個紅框交匯處.STM32F103VCT6 這個CPU的USART1接的是PB6/PB7 但是上電初始化后 默認功能并非是USART1.所以想要用串口功能 .必須用端口重映射..

          大家知道,STM32的單片機每個功能模塊有自己的時鐘系統(tǒng),所以要想要調(diào)用STM32單片機的功能模塊時 必須先配置對應(yīng)時鐘,然后才能去操作相應(yīng)的功能模塊.端口重映射也一樣.如圖示:

          重映射步驟為:

          1.打開重映射時鐘和USART重映射后的I/O口引腳時鐘,

          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);

          2.I/O口重映射開啟.

          GPIO_PinRemapConfig(GPIO_Remap_USART1,ENABLE);

          3.配制重映射引腳,這里只需配置重映射后的I/O,原來的不需要去配置.

          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
          GPIO_Init(GPIOB, &GPIO_InitStructure);


          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
          GPIO_Init(GPIOB, &GPIO_InitStructure);

          只需要這三步,串口就可以正常使用了,簡單吧? 但是我糾結(jié)了大半個小時才搞定的,好多事情都是說起來容易做起來難的,希望我以后多多進步.不要眼高手低,嗯 我正朝這個方向前進.





          加點自己的東西

          簡單的說 STM32的 io 有3個功能 一個是默認的 一個是復(fù)用 一個是重映射功能(這個其實也屬于復(fù)用)

          如果配置成復(fù)用 則將使用第2個功能 如果配置成復(fù)用 同時 相應(yīng)的重映射配置了 則將使用第3個功能

          通常一個口的 復(fù)用+重映射有好多 不止兩個 這時候就看你使能哪個設(shè)備了

          開復(fù)用 + 使能設(shè)備+ 是否重映射 就可以決定這個io口 到底使用哪個功能



          關(guān)鍵詞: STM32復(fù)用重映

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();