0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式面試知識(shí)點(diǎn)總結(jié)--STM32篇

硬件攻城獅 ? 來(lái)源:CSDN-聚優(yōu)致成 ? 2023-03-26 09:36 ? 次閱讀

一、STM32F1和F4的區(qū)別?

解答:

參看:STM32開發(fā) – STM32初識(shí)
內(nèi)核不同:F1是Cortex-M3內(nèi)核,F(xiàn)4是Cortex-M4內(nèi)核;
主頻不同:F1主頻72MHz,F(xiàn)4主頻168MHz;
浮點(diǎn)運(yùn)算:F1無(wú)浮點(diǎn)運(yùn)算單位,F(xiàn)4有;
功能性能:F4外設(shè)比F1豐富且功能更強(qiáng)大,比如GPIO翻轉(zhuǎn)速率、上下拉電阻配置、ADC精度等;
內(nèi)存大?。篎1內(nèi)部SRAM最大64K,F(xiàn)4有192K(112+64+16)。

二、介紹以下STM32啟動(dòng)過程?

解答:

參看:STM32開發(fā) – 啟動(dòng)流程
通過Boot引腳設(shè)定,尋找初始地址
初始化棧指針 __initial_sp
指向復(fù)位程序 Reset_Hander
設(shè)置異常中斷 HardFault_Handler
設(shè)置系統(tǒng)時(shí)鐘 SystemInit
調(diào)用C庫(kù)函數(shù) _main

三、介紹以下GPIO?

解答:

參看:STM32開發(fā) – GPIO詳解
GPIO 8種工作模式(gpio_init.GPIO_Mode):
(1) GPIO_Mode_AIN 模擬輸入
(2) GPIO_Mode_IN_FLOATING 浮空輸入
(3) GPIO_Mode_IPD 下拉輸入
(4) GPIO_Mode_IPU 上拉輸入
(5) GPIO_Mode_Out_OD 開漏輸出
(6) GPIO_Mode_Out_PP 推挽輸出
(7) GPIO_Mode_AF_OD 復(fù)用開漏輸出
(8) GPIO_Mode_AF_PP 復(fù)用推挽輸出

APB2負(fù)責(zé) AD,I/O,高級(jí)TIM,串口1。
APB1負(fù)責(zé) DA,USB,SPI,I2C,CAN,串口2345,普通TIM,PWR

GPIO框圖剖析:
參看:STM32-GPIO詳解

7e588de8-ca4e-11ed-bfe3-dac502259ad0.png

四、UART

問題一:串行通信方式介紹?
同步通信:I2C 半雙工,SPI 全雙工異步通信:RS485 半雙工、RS232 全雙工

問題二:串口配置?
串口設(shè)置的一般步驟可以總結(jié)為如下幾個(gè)步驟:(1)串口時(shí)鐘使能,GPIO時(shí)鐘使能(2)串口復(fù)位(3)GPIO端口模式設(shè)置TX的GPIO工作模式為:GPIO_Mode_AF_PP;//復(fù)用推挽輸出RX的GPIO工作模式為:GPIO_Mode_IN_FLOATING;//浮空輸入(4)串口參數(shù)初始化主要包含:波特率設(shè)置(115200)、8個(gè)數(shù)據(jù)位、1個(gè)停止位、無(wú)奇偶校驗(yàn)位、無(wú)硬件數(shù)據(jù)流控制、收發(fā)模式。(5)開啟中斷并且初始化NVIC(如果需要開啟中斷才需要這個(gè)步驟)(6)使能串口(7)編寫中斷處理函數(shù)

問題三:USART主要特點(diǎn)?
(1)全雙工操作(相互獨(dú)立的接收數(shù)據(jù)和發(fā)送數(shù)據(jù));(2)同步操作時(shí),可主機(jī)時(shí)鐘同步,也可從機(jī)時(shí)鐘同步;(3)獨(dú)立的高精度波特率發(fā)生器,不占用定時(shí)/計(jì)數(shù)器;(4)支持5、6、7、8和9位數(shù)據(jù)位,1或2位停止位的串行數(shù)據(jù)楨結(jié)構(gòu);(5)由硬件支持的奇偶校驗(yàn)位發(fā)生和檢驗(yàn);(6)數(shù)據(jù)溢出檢測(cè);(7)幀錯(cuò)誤檢測(cè);(8)包括錯(cuò)誤起始位的檢測(cè)噪聲濾波器和數(shù)字低通濾波器;(9)三個(gè)完全獨(dú)立的中斷,TX發(fā)送完成、TX發(fā)送數(shù)據(jù)寄存器空、RX接收完成;(10)支持多機(jī)通信模式;(11)支持倍速異步通信模式。

解答:

參看:STM32開發(fā) – 串口詳解
應(yīng)用場(chǎng)景:GPS、藍(lán)牙4G模塊

五、I2C

問題一:I2C 總線在傳送數(shù)據(jù)過程中共有三種類型信號(hào)?
(1)開始信號(hào):SCL 為高電平時(shí),SDA 由高電平向低電平跳變,開始傳送數(shù)據(jù)。(2)結(jié)束信號(hào):SCL 為高電平時(shí),SDA 由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。(3)應(yīng)答信號(hào):接收數(shù)據(jù)的 IC 在接收到 8bit 數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的 IC 發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。CPU 向受控單元發(fā)出一個(gè)信號(hào)后,等待受控單元發(fā)出一個(gè)應(yīng)答信號(hào),CPU 接收到應(yīng)答信號(hào)后,根據(jù)實(shí)際情況作出是否繼續(xù)傳遞信號(hào)的判斷。若未收到應(yīng)答信號(hào),由判斷為受控單元出現(xiàn)故障。

問題二:I2C配置主機(jī)模式端口該怎么配置?
硬件模式:復(fù)用開漏輸出、既不上拉也不下拉。(快速模式:400 Kbit/s)軟件模擬:推挽輸出、配置上拉電阻。

問題三:I2C仲裁機(jī)制?
參看:S5PV210開發(fā) – I2C 你知道多少?(三)
I2C 仲裁機(jī)制,理解了 線“與”(Wired-AND),就一目了然了。簡(jiǎn)單說,它遵循“低電平優(yōu)先”的原則,即誰(shuí)先發(fā)送低電平誰(shuí)就會(huì)掌握對(duì)總線的控制權(quán)。

解答:

參看:STM32開發(fā) – PMIC、I2C詳解
硬件模式:是有通信速率設(shè)置的
/* STM32 I2C 快速模式 */
#define I2C_Speed 400000

/* 通信速率 */

I2C_InitStructure.I2C_ClockSpeed = I2C_Speed;

軟件模擬:沒有設(shè)置通信速率,該怎么計(jì)算呢?
通過I2C總線位延遲函數(shù) i2c_Delay:

static void i2c_Delay(void)
{
uint8_t i;

/*
 下面的時(shí)間是通過安富萊AX-Pro邏輯分析儀測(cè)試得到的。
CPU主頻72MHz時(shí),在內(nèi)部Flash運(yùn)行, MDK工程不優(yōu)化
循環(huán)次數(shù)為10時(shí),SCL頻率 = 205KHz 
循環(huán)次數(shù)為7時(shí),SCL頻率 = 347KHz, SCL高電平時(shí)間1.5us,SCL低電平時(shí)間2.87us 
 循環(huán)次數(shù)為5時(shí),SCL頻率 = 421KHz, SCL高電平時(shí)間1.25us,SCL低電平時(shí)間2.375us 
        
    IAR工程編譯效率高,不能設(shè)置為7
*/
for (i = 0; i < 10; i++);
}

應(yīng)用場(chǎng)景:PMIC、加速度計(jì)、陀螺儀

六、SPI

問題一:SPI需要幾根線?
SPI 接口一般使用 4 條線通信:MISO 主設(shè)備數(shù)據(jù)輸入,從設(shè)備數(shù)據(jù)輸出。MOSI 主設(shè)備數(shù)據(jù)輸出,從設(shè)備數(shù)據(jù)輸入。SCLK 時(shí)鐘信號(hào),由主設(shè)備產(chǎn)生。CS 從設(shè)備片選信號(hào),由主設(shè)備控制。

問題二:SPI通信的四種模式?
SPI 有四種工作模式,各個(gè)工作模式的不同在于 SCLK 不同, 具體工作由 CPOL,CPHA 決定。(1)CPOL: (Clock Polarity),時(shí)鐘極性:
SPI的CPOL,表示當(dāng)SCLK空閑idle的時(shí)候,其電平的值是低電平0還是高電平1:CPOL=0,時(shí)鐘空閑idle時(shí)候的電平是低電平,所以當(dāng)SCLK有效的時(shí)候,就是高電平,就是所謂的active-high;CPOL=1,時(shí)鐘空閑idle時(shí)候的電平是高電平,所以當(dāng)SCLK有效的時(shí)候,就是低電平,就是所謂的active-low;

7e6aba68-ca4e-11ed-bfe3-dac502259ad0.jpg

(2)CPHA:(Clock Phase),時(shí)鐘相位:
相位,對(duì)應(yīng)著數(shù)據(jù)采樣是在第幾個(gè)邊沿(edge),是第一個(gè)邊沿還是第二個(gè)邊沿,
0對(duì)應(yīng)著第一個(gè)邊沿,1對(duì)應(yīng)著第二個(gè)邊沿。對(duì)于:
CPHA=0,表示第一個(gè)邊沿:
對(duì)于CPOL=0,idle時(shí)候的是低電平,第一個(gè)邊沿就是從低變到高,所以是上升沿;
對(duì)于CPOL=1,idle時(shí)候的是高電平,第一個(gè)邊沿就是從高變到低,所以是下降沿;
CPHA=1,表示第二個(gè)邊沿:
對(duì)于CPOL=0,idle時(shí)候的是低電平,第二個(gè)邊沿就是從高變到低,所以是下降沿;
對(duì)于CPOL=1,idle時(shí)候的是高電平,第一個(gè)邊沿就是從低變到高,所以是上升沿;

7e890c2a-ca4e-11ed-bfe3-dac502259ad0.png

問題三:該如何確定使用哪種模式?
(1)先確認(rèn)從機(jī)需求的 SCLK 極性,不工作時(shí)是在低電位還是高電位,由此確認(rèn) CPOL 為 0 或 1。看原理圖,我們?cè)O(shè)置串行同步時(shí)鐘的空閑狀態(tài)為高電平所以我們選擇 SPI_CPOL_High。也就是CPOL為1
(2)再由slave芯片 datasheet 中的時(shí)序圖確認(rèn) slave 芯片是在 SCLK 的下降沿采集數(shù)據(jù),還是在SCLK的上升沿。翻譯一下:W25Q32JV通過SPI兼容總線訪問,包括四個(gè)信號(hào):串行時(shí)鐘(CLK),芯片選擇(/CS),串行數(shù)據(jù)輸入(DI)和串行數(shù)據(jù)輸出(DO)。標(biāo)準(zhǔn)SPI指令使用DI輸入引腳串行地將指令、地址或數(shù)據(jù)寫入CLK上升沿上的設(shè)備。DO輸出引腳用于從CLK下降沿上的設(shè)備讀取數(shù)據(jù)或狀態(tài)。支持模式0(0,0)和3(1,1)的SPI總線操作。模式0和模式3關(guān)注的是當(dāng)SPI總線主端處于待機(jī)狀態(tài),數(shù)據(jù)沒有被傳輸?shù)酱蠪lash時(shí)CLK信號(hào)的正常狀態(tài)。對(duì)于模式0,在下降和上升時(shí),CLK信號(hào)通常是低的邊緣/ CS。對(duì)于模式3,在/CS的下降和上升邊緣上CLK信號(hào)通常是高的。既然串行同步時(shí)鐘的空閑狀態(tài)為高電平,這里我們選擇第二個(gè)跳變沿,所以選擇 SPI_CPHA_2Edge。也就是CPHA為1
即,我們選擇的是模式3(1,1)。

7e9d50e0-ca4e-11ed-bfe3-dac502259ad0.png

解答:

參看:STM32開發(fā) – W25Q32JV SPI FlASH詳解
參看:詳解SPI中的極性CPOL和相位CPHA
應(yīng)用場(chǎng)景:SPI Flash,W25Q32 存儲(chǔ)器容量 32Mb (4M x 8),即4M byte

七、CAN

問題一:CAN總結(jié)介紹一下?
CAN控制器根據(jù) CAN_L 和 CAN_H上 的電位差來(lái)判斷總線電平。總線電平分為顯性電平和隱性電平,二者比居其一。發(fā)送方通過使總線電平發(fā)生變化,將消息發(fā)送給接收方。

問題二:CAN初始化配置步驟?
(1)配置相關(guān)引腳的復(fù)用功能,使能CAN時(shí)鐘(2)設(shè)置CAN工作模式及波特率等(CAN初始化環(huán)回模式,波特率500Kbps )(3)設(shè)置濾波器

問題三:CAN發(fā)送數(shù)據(jù)格式?
CanTxMsg TxMessage;TxMessage.StdId=0x12; // 標(biāo)準(zhǔn)標(biāo)識(shí)符TxMessage.ExtId=0x12; // 設(shè)置擴(kuò)展標(biāo)示符TxMessage.IDE=CAN_Id_Standard; // 標(biāo)準(zhǔn)幀TxMessage.RTR=CAN_RTR_Data; // 數(shù)據(jù)幀TxMessage.DLC=len; // 要發(fā)送的數(shù)據(jù)長(zhǎng)度 發(fā)送8個(gè)字節(jié)for(i=0;i

解答:

參看:STM32開發(fā) – CAN總線詳解

八、DMA

問題一:DMA介紹?
直接存儲(chǔ)器存取(DMA) 用來(lái)提供在外設(shè)和存儲(chǔ)器之間或者存儲(chǔ)器和存儲(chǔ)器之間的高速數(shù)據(jù)傳輸。無(wú)須CPU干預(yù),數(shù)據(jù)可以通過DMA快速地移動(dòng),這就節(jié)省了CPU的資源來(lái)做其他操作。

問題一:DMA傳輸模式有幾種?
DMA_Mode_Circular 循環(huán)模式DMA_Mode_Normal 正常緩存模式應(yīng)用場(chǎng)景:GPS、藍(lán)牙,都是用的循環(huán)采集,DMA_Mode_Circular模式。

解答:

參看:STM32開發(fā) – DMA詳解

一個(gè)比較重要的函數(shù),獲取當(dāng)前剩余數(shù)據(jù)量大小,根據(jù)設(shè)置的接收buff大小減去當(dāng)前剩余數(shù)據(jù)量 ,得到當(dāng)前接收數(shù)據(jù)大小。

九、中斷

問題一:描述一下中斷的處理流程?
(1)初始化中斷,設(shè)置觸發(fā)方式是上升沿/下降沿/雙沿觸發(fā)。(2)觸發(fā)中斷,進(jìn)入中斷服務(wù)函數(shù)

問題二:STM32的中斷控制器支持多少個(gè)外部中斷?
STM32的中斷控制器支持19個(gè)外部中斷/事件請(qǐng)求:
從圖上來(lái)看,GPIO 的管腳 GPIOx.0~GPIOx.15(x=A,B,C,D,E,F(xiàn),G)分別對(duì)應(yīng)中斷線 0 ~ 15。另外四個(gè)EXTI線的連接方式如下:● EXTI線16連接到PVD輸出● EXTI線17連接到RTC鬧鐘事件● EXTI線18連接到USB喚醒事件● EXTI線19連接到以太網(wǎng)喚醒事件(只適用于互聯(lián)型產(chǎn)品)中斷服務(wù)函數(shù)列表:
IO口外部中斷在中斷向量表中只分配了7個(gè)中斷向量,也就是只能使用7個(gè)中斷服務(wù)函數(shù)。EXTI0_IRQHandlerEXTI1_IRQHandlerEXTI2_IRQHandlerEXTI3_IRQHandlerEXTI4_IRQHandlerEXTI9_5_IRQHandlerEXTI15_10_IRQHandler

解答:

參看:STM32開發(fā) – 外部中斷詳解

十、STM32有幾個(gè)時(shí)鐘源?
STM32 有5個(gè)時(shí)鐘源:HSI、HSE、LSI、LSE、PLL。①、HSI是高速內(nèi)部時(shí)鐘,RC振蕩器,頻率為8MHz,精度不高。②、HSE是高速外部時(shí)鐘,可接石英/陶瓷諧振器,或者接外部時(shí)鐘源,頻率范圍為4MHz~16MHz。③、LSI是低速內(nèi)部時(shí)鐘,RC振蕩器,頻率為40kHz,提供低功耗時(shí)鐘。④、LSE是低速外部時(shí)鐘,接頻率為32.768kHz的石英晶體。⑤、PLL為鎖相環(huán)倍頻輸出,其時(shí)鐘輸入源可選擇為HSI/2、HSE或者HSE/2。倍頻可選擇為2~16倍,但是其輸出頻率最大不得超過72MHz。

解答:

參看:STM32開發(fā) – 時(shí)鐘系統(tǒng)詳解

十一、RTOS的任務(wù)是怎么寫的?如何切出這個(gè)任務(wù)?

解答:

一個(gè)任務(wù),也稱作一個(gè)線程。
UCOS有一個(gè)任務(wù)調(diào)度機(jī)制,根據(jù)任務(wù)的優(yōu)先級(jí)進(jìn)行調(diào)度。
一個(gè)是硬件中斷, 那么系統(tǒng)會(huì)將當(dāng)前任務(wù)有關(guān)變量入棧,然后執(zhí)行中斷服務(wù)程序,執(zhí)行完成后出棧返回.
另一個(gè)是任務(wù)之間的切換,使用的方法就是任務(wù)調(diào)度,每一個(gè)任務(wù)有自己的棧,順度也是一樣的入棧,然后執(zhí)行另一個(gè)程序,然后出線返回。

并非是每一任務(wù)按優(yōu)先級(jí)順序輪流執(zhí)行的,而是高優(yōu)先級(jí)的任務(wù)獨(dú)占運(yùn)行,除非其主動(dòng)放棄執(zhí)行,否則低優(yōu)先級(jí)任務(wù)不能搶占,同時(shí)高優(yōu)先級(jí)可以把放出去給低優(yōu)先級(jí)任務(wù)使用的CPU占用權(quán)搶回來(lái)。所以u(píng)cos的任務(wù)間要注意插入等待延時(shí),以便ucos切出去讓低優(yōu)先級(jí)任務(wù)執(zhí)行。

十二、UCOSII中任務(wù)間的通信方式有哪幾種?

解答:

在UCOSII中,是使用信號(hào)量、郵箱(消息郵箱)和消息隊(duì)列這些被稱作事件的中間環(huán)節(jié)來(lái)實(shí)現(xiàn)任務(wù)間的通信的,還有全局變量。
信號(hào)量:
參看:ucosII 信號(hào)量使用總結(jié)(舉例講解)
信號(hào)量用于:
1.控制共享資源的使用權(quán)(滿足互斥條件)
2.標(biāo)志某時(shí)間的發(fā)生
3.使2個(gè)任務(wù)的行為同步

應(yīng)用實(shí)例:互斥信號(hào)量
作為互斥條件,信號(hào)量初始化為1。
實(shí)現(xiàn)目標(biāo):調(diào)用串口發(fā)送命令,必須等待返回“OK”字符過后,才能發(fā)送下一條命令。每個(gè)任務(wù)都有可能使用到此發(fā)送函數(shù),不能出現(xiàn)沖突!

郵箱(消息郵箱):

消息隊(duì)列:
概念:
(1)消息隊(duì)列實(shí)際上就是郵箱陣列。
(2)任務(wù)和中斷都可以將一則消息放入隊(duì)列中,任務(wù)可以從消息隊(duì)列中獲取消息。
(3)先進(jìn)入隊(duì)列的消息先傳給任務(wù)(FIFO)。
(4)每個(gè)消息隊(duì)列有一張等待消息任務(wù)的等待列表,如果消息列中沒有消息,則等待消息的任務(wù)就被掛起,直到消息到來(lái)。

應(yīng)用場(chǎng)景:
串口接收程序中的接收緩沖區(qū)。
儲(chǔ)存外部事件。

十三、項(xiàng)目使用了自定義協(xié)議,是什么結(jié)構(gòu)?

解答:

了解過Modbus協(xié)議。
結(jié)構(gòu)為:幀頭(SDTC)+幀長(zhǎng)度+指令+流水號(hào)+數(shù)據(jù)+CRC校驗(yàn)。

十四、uCOSII和Linux的差異?

解答:

μC/OS-II是專門為計(jì)算機(jī)的嵌入式應(yīng)用設(shè)計(jì)的,μC/OS-II 具有執(zhí)行效率高、占用空間小、實(shí)時(shí)性能優(yōu)良和可擴(kuò)展性強(qiáng)等特點(diǎn), 最小內(nèi)核可編譯至 2KB。μC/OS-II 已經(jīng)移植到了幾乎所有知名的CPU 上。
linux 免費(fèi),安全,穩(wěn)定,應(yīng)用范圍廣,在嵌入式上,服務(wù)器上,家用機(jī),都有廣泛應(yīng)用。
μC/OS-II Linux 都適合用在嵌入式上。但μC/OS-II 是專為嵌入式而設(shè)計(jì),這樣的結(jié)果是,運(yùn)行效率更高,占用資源更少。
linux 都可以用作服務(wù)器上,使用率高。linux 雖然不是專門針對(duì)服務(wù)器而開發(fā),但其源碼公開,完全可以修改,使得兩者差異不大,最主要的發(fā)行版redhat linux 就是在服務(wù)器上用得很多的系統(tǒng)。

十五、Git提交代碼

問題:Git提交代碼過程?

解答:

1、顯示工作路徑下已修改的文件:

$ git status

2、進(jìn)入修改文件目錄:

$cd -

3、顯示與上次提交版本文件的不同:

$ git diff

4、把當(dāng)前所有修改添加到下次提交中:

$ git add .

5、添加相關(guān)功能說明,(第一次提交使用這個(gè))

$ git commit -s

其中還要注明:
Fuction: 修改代碼的功能
Ticket: 對(duì)應(yīng)Bug號(hào)
注意:每一個(gè)文件夾下都要重新提一次。
6、查看提交代碼

$ tig .

7、請(qǐng)勿修改已發(fā)布的提交記錄! (以后提交使用這個(gè))

$git commit --amend

命令模式下:
:x ( 寫入文件并退出)
8、推送到服務(wù)器

$ git push origin HEAD:refs/for/master

十六、ucosii和ucosiii和freeRTOS比較

問題一:三者比較?

解答:

ucosii和freeRTOS比較:
(1)freeRTOS只支持TCP/IP, uCOSii則有大量外延支持,比如FS, USB, GUI, CAN等的支持。(我們用于tbox要用到CAN,所以選擇uCOSii)
(2)freeRTOS 是在商業(yè)上免費(fèi)應(yīng)用。uCOSii在商業(yè)上的應(yīng)用是要付錢的。
(3)任務(wù)間通訊freeRTOS只支持隊(duì)列, 信號(hào)量, 互斥量。uCOSii除這些外,還支持事件標(biāo)志組,郵箱。
(4)理論上講,freeRTOS 可以管理超過64個(gè)任務(wù),而uCOSii只能管理64個(gè)。

ucosii和ucosiii比較:
那么從μC/OS-II到μC/OS-III有哪些不同的地方呢?增加了什么,我們看改動(dòng)還是很大的。一個(gè)是原來(lái)只有0~63個(gè)優(yōu)先級(jí),而且優(yōu)先級(jí)不能重復(fù),現(xiàn)在允許幾個(gè)任務(wù)使用同一個(gè)優(yōu)先級(jí),在同一個(gè)優(yōu)先級(jí)里面,支持時(shí)間片調(diào)度法;第二個(gè)是允許用戶在程序運(yùn)行中動(dòng)態(tài)配置實(shí)時(shí)操作系統(tǒng)內(nèi)核資源,比如,任務(wù)、任務(wù)棧、信號(hào)量、事件標(biāo)志組、消息隊(duì)列、消息數(shù)、互斥型信號(hào)量、存儲(chǔ)塊劃分和定時(shí)器,可以在程序運(yùn)行中變更。這樣,用戶可以避免在程序編譯過程中出現(xiàn)資源不夠分配的問題。在資源復(fù)用上,也做了一些改進(jìn)。μC/OS-II中,最多任務(wù)數(shù)有64個(gè),到了版本2.82以后是256個(gè),μC/OS-III中,用戶可以由任意多的任務(wù)、任意多的信號(hào)量、互斥型信號(hào)量、事件標(biāo)志、消息列表、定時(shí)器和任意分配的存儲(chǔ)塊容量,僅受限于用戶CPU可以使用的RAM量。這個(gè)也是一個(gè)很大的擴(kuò)展。(問:邵老師,它的這個(gè)數(shù)是啟動(dòng)時(shí)就固定的,還是啟動(dòng)后隨便定?)它是配置的時(shí)候可以自由定義的,只有你的RAM足夠大的話。第四點(diǎn)是增加了很多功能,功能總是越來(lái)越多的,大伙可以看一下的。原來(lái)這些功能在μC/OS-II里面是沒有的。

十七、低功耗模式

問題一:低功耗模式有幾種?喚醒方式是什么?

解答:

7eba5582-ca4e-11ed-bfe3-dac502259ad0.png

十八、物聯(lián)網(wǎng)的架構(gòu)

問題一:物聯(lián)網(wǎng)的架構(gòu)分為幾層?每一層都負(fù)責(zé)哪些功能?

解答:

分三層,物聯(lián)網(wǎng)從架構(gòu)上面可以分為感知層、網(wǎng)絡(luò)層和應(yīng)用層,
(1)感知層:負(fù)責(zé)信息采集和物物之間的信息傳輸,信息采集的技術(shù)包括傳感器、條碼和二維碼、 RFID射頻技術(shù)、音視頻等多媒體信息,信息傳輸包括遠(yuǎn)近距離數(shù)據(jù)傳輸技術(shù)、自組織組網(wǎng)技術(shù)、協(xié)同信息處理技術(shù)、信息采集中間件技術(shù)等傳感器網(wǎng)絡(luò)。感知層是實(shí)現(xiàn)物聯(lián)網(wǎng)全面感知的核心能力,是物聯(lián)網(wǎng)中包括關(guān)鍵技術(shù)、標(biāo)準(zhǔn)化方面、產(chǎn)業(yè)化方面亟待突破的部分,關(guān)鍵在于具備更精確、更全面的感知能力,并解決低功耗、小型化和低成本的問題。
(2)網(wǎng)絡(luò)層:是利用無(wú)線和有線網(wǎng)絡(luò)對(duì)采集的數(shù)據(jù)進(jìn)行編碼、認(rèn)證和傳輸,廣泛覆蓋的移動(dòng)通信網(wǎng)絡(luò)是實(shí)現(xiàn)物聯(lián)網(wǎng)的基礎(chǔ)設(shè)施,是物聯(lián)網(wǎng)三層中標(biāo)準(zhǔn)化程度昀高、產(chǎn)業(yè)化能力昀強(qiáng)、昀成熟的部分,關(guān)鍵在于為物聯(lián)網(wǎng)應(yīng)用特征進(jìn)行優(yōu)化和改進(jìn),形成協(xié)同感知的網(wǎng)絡(luò)。
(3)應(yīng)用層:提供豐富的基于物聯(lián)網(wǎng)的應(yīng)用,是物聯(lián)網(wǎng)發(fā)展的根本目標(biāo),將物聯(lián)網(wǎng)技術(shù)與行業(yè)信息化需求相結(jié)合,實(shí)現(xiàn)廣泛智能化應(yīng)用的解決方案集,關(guān)鍵在于行業(yè)融合、信息資源的開發(fā)利用、低成本高質(zhì)量的解決方案、信息安全的保障以及有效的商業(yè)模式的開發(fā)。

十九、內(nèi)存管理

問題一:UCOS中內(nèi)存管理的方法有哪些?

解答:

系統(tǒng)通過與內(nèi)存分區(qū)相關(guān)聯(lián)的內(nèi)存控制塊來(lái)對(duì)內(nèi)存分區(qū)進(jìn)行管理。

動(dòng)態(tài)內(nèi)存管理函數(shù)有:
創(chuàng)建動(dòng)態(tài)內(nèi)存分區(qū)函數(shù)OSMemCreate();
請(qǐng)求獲得內(nèi)存塊函數(shù)OSMemGet();
釋放內(nèi)存塊函數(shù)OSMemPut();

二十、Ucos中任務(wù)的狀態(tài)有哪幾種?畫出任務(wù)狀態(tài)之間的關(guān)系圖?

解答:

有5種狀態(tài):
睡眠狀態(tài)、就緒狀態(tài)、運(yùn)行狀態(tài)、等待狀態(tài)(等待某一事件發(fā)生)和中斷服務(wù)狀態(tài)。

UCOSII任務(wù)的5個(gè)狀態(tài)轉(zhuǎn)換關(guān)系:

7ed800dc-ca4e-11ed-bfe3-dac502259ad0.png

二十一、ADC

問題一:簡(jiǎn)述STM32的ADC系統(tǒng)的功能特性?
(1)12bit分辨率(2)自動(dòng)校準(zhǔn)(3)可編程數(shù)據(jù)對(duì)齊(轉(zhuǎn)換結(jié)果支持左對(duì)齊或右對(duì)齊方式存儲(chǔ)在16位數(shù)據(jù)寄存器)(4)單次和連續(xù)轉(zhuǎn)換模式

解答:

參看:STM32開發(fā) – ADC詳解

二十二、系統(tǒng)時(shí)鐘

問題一:簡(jiǎn)述設(shè)置系統(tǒng)時(shí)鐘的基本流程?
(1)打開HSE,等待就緒后,設(shè)置Flash等待操作。(2)設(shè)置AHB,APB1,APB2分頻系數(shù),確定他們各自和系統(tǒng)時(shí)鐘的關(guān)系。(3)設(shè)置CFGR寄存器確定PLL的時(shí)鐘來(lái)源和倍頻系數(shù)(HSE外部8M*9倍=72MHz)。(4)使能PLL,將系統(tǒng)時(shí)鐘源切換到PLL.

解答:

二十三、HardFault_Handler處理

問題一:造成原因?
(1)數(shù)組越界操作;(2)內(nèi)存溢出,訪問越界;(3)堆棧溢出,程序跑飛;(4)中斷處理錯(cuò)誤;

問題二:處理方式?
(1)在startup_stm32f10x_cl.s里找到HardFault_Handler的地址重映射,并重新編寫,讓其跳轉(zhuǎn)到HardFaultHandle函數(shù)。
(2)打印查看R0、R1、R2、R3、R12、LR、PC、PSR寄存器。(3) 查看Fault狀態(tài)寄存器組(SCB->CFSR和SCB->HFSR)

解答:

參看:STM32開發(fā) – HardFault_Handler處理
參看:Cortex-M3和Cortex-M4 Fault異常應(yīng)用之一 ----- 基礎(chǔ)知識(shí)

二十四、TTS語(yǔ)音合成方法

問題一:sim7600 TTS語(yǔ)音使用什么方法?

解答:

(1)使用unicode編碼合成聲音
AT+CTTS=1,”
6B228FCE4F7F75288BED97F3540862107CFB7EDF”
內(nèi)容是“歡迎使用語(yǔ)音合成系統(tǒng)”,模塊收發(fā)中文短信就是unicode編碼,所以很容易將短信朗讀出來(lái);
(2)直接輸入文本,普通字符采用ASIIC碼,漢字采用GBK編碼。
AT+CTTS=2,”歡迎使用語(yǔ)音合成系統(tǒng)”

二十五、定時(shí)器

問題一:已知STM32的系統(tǒng)時(shí)鐘為72MHz,如何設(shè)置相關(guān)寄存器,實(shí)現(xiàn)20ms定時(shí)?

解答:

參看:STM32開發(fā) – Systick定時(shí)器
通過SysTick_Config(SystemCoreClock / OS_TICKS_PER_SEC))//1ms定時(shí)器

其中:

uint32_t SystemCoreClock         = SYSCLK_FREQ_72MHz;        /*!< System Clock Frequency (Core Clock) */
#define SYSCLK_FREQ_72MHz  72000000
#define OS_TICKS_PER_SEC       1000    /* Set the number of ticks in one second

如果需要20ms則,可以通一設(shè)置一個(gè)全局變量,然后定初值得為20,這樣,每個(gè)systick中斷一次,這個(gè)全局變量減1,減到0,即systick中斷20次,時(shí)間為:1ms*20=20ms。從而實(shí)現(xiàn)20ms的定時(shí)。

二十六、優(yōu)先級(jí)

問題一:如果是兩個(gè)優(yōu)先級(jí)相同的任務(wù)怎么運(yùn)行?

解答:

使獲得信號(hào)量任務(wù)的優(yōu)先級(jí)在使用共享資源期間暫時(shí)提升到所有任務(wù)最高優(yōu)先級(jí)的高一個(gè)級(jí)別上,以使該任務(wù)不被其他任務(wù)所打斷,從而能盡快地使用完共享資源并釋放信號(hào)量,然后在釋放信號(hào)量之后,再恢復(fù)該任務(wù)原來(lái)的優(yōu)先級(jí)別。

二十七、狀態(tài)機(jī)

問題一:使用的什么狀態(tài)機(jī)?

解答:

參看:STM32開發(fā) – 狀態(tài)機(jī)與狀態(tài)切換邏輯

有限狀態(tài)機(jī),(英語(yǔ):Finite-state machine, FSM),又稱有限狀態(tài)自動(dòng)機(jī),簡(jiǎn)稱狀態(tài)機(jī)。
參看:有限狀態(tài)機(jī)FSM詳解及其實(shí)現(xiàn)

假設(shè)狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換由下表所示:

7eecbe8c-ca4e-11ed-bfe3-dac502259ad0.png

實(shí)現(xiàn):(使用switch語(yǔ)句)

//橫著寫
void event0func(void)
{
    switch(cur_state)
    {
        case State0:
             action0;
             cur_state = State1;
        break;
         case State1:
             action1;
             cur_state = State2;
        break;
         case State2:
             action1;
             cur_state = State0;
        break;
        default:break;
    }
}
 
void event1func(void)
{
    switch(cur_state)
    {
        case State0:
             action4;
             cur_state = State1;
        break;
        default:break;
    }
}
 
void event2func(void)
{
    switch(cur_state)
    {
        case State0:
             action5;
             cur_state = State2;
        break;
         case State1:
             action6;
             cur_state = State0;
        break;
        default:break;
    }
}

二十八、器件選型

問題一:STM32F407 VS STM32F103 主要功能及資源對(duì)比?

解答:

參看:STM32F407 VS STM32F103 主要功能及資源對(duì)比

7f05328c-ca4e-11ed-bfe3-dac502259ad0.png

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)核
    +關(guān)注

    關(guān)注

    3

    文章

    1351

    瀏覽量

    40159
  • STM32
    +關(guān)注

    關(guān)注

    2263

    文章

    10849

    瀏覽量

    353858
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4262

    瀏覽量

    62243
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1184

    瀏覽量

    51752
  • stm32f1
    +關(guān)注

    關(guān)注

    1

    文章

    56

    瀏覽量

    12151

原文標(biāo)題:解答:

文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式C語(yǔ)言知識(shí)點(diǎn)總結(jié)

    怎么才能做好嵌入式開發(fā)?學(xué)好C語(yǔ)言吧!今天就來(lái)推薦一大佬寫的嵌入式C語(yǔ)言知識(shí)點(diǎn)總結(jié)。
    發(fā)表于 09-27 09:53 ?1148次閱讀

    嵌入式內(nèi)存管理的知識(shí)點(diǎn)總結(jié)

    任何程序運(yùn)行起來(lái)都需要分配內(nèi)存空間存放該進(jìn)程的資源信息的,C程序也不例外。C程序中的變量、常量、函數(shù)、代碼等等的信息所存放的區(qū)域都有所不同,不同的區(qū)域又有不同的特性。C語(yǔ)言學(xué)習(xí)者、尤其是在學(xué)習(xí)嵌入式的朋友,這些知識(shí)點(diǎn)一定要吃透!
    發(fā)表于 08-17 09:33 ?448次閱讀
    <b class='flag-5'>嵌入式</b>內(nèi)存管理的<b class='flag-5'>知識(shí)點(diǎn)</b><b class='flag-5'>總結(jié)</b>

    嵌入式C/單片機(jī)C/標(biāo)準(zhǔn)C知識(shí)點(diǎn)

      深圳發(fā)燒友嵌入式實(shí)訓(xùn)學(xué)院總結(jié)了一些C語(yǔ)言的知識(shí)點(diǎn):  僅供大家參考,想一起和我討論嗎,可以加一下我的QQ1187729241,dong老師  一、嵌入式C/單片機(jī)C/標(biāo)準(zhǔn)C
    發(fā)表于 10-24 14:42

    關(guān)于嵌入式DSP上的視頻編解碼的知識(shí)點(diǎn)總結(jié)的太棒了

    關(guān)于嵌入式DSP上的視頻編解碼的知識(shí)點(diǎn)總結(jié)的太棒了
    發(fā)表于 06-08 06:49

    C語(yǔ)言程序小知識(shí)點(diǎn)總結(jié)

    C語(yǔ)言總結(jié)stm32嵌入式開發(fā))文章目錄C語(yǔ)言總結(jié)stm32嵌入式開發(fā))c程序小
    發(fā)表于 11-05 07:45

    推薦一大佬寫的嵌入式C語(yǔ)言知識(shí)點(diǎn)總結(jié)

    怎么做好嵌入式?相信這個(gè)問題無(wú)論問誰(shuí)你都會(huì)得到一句學(xué)好C語(yǔ)言!今天推薦一大佬寫的嵌入式C語(yǔ)言知識(shí)點(diǎn)總結(jié),非常值得一讀。從語(yǔ)法上來(lái)說C語(yǔ)言并
    發(fā)表于 12-14 08:09

    嵌入式C語(yǔ)言必學(xué)知識(shí)點(diǎn)匯總

    導(dǎo)讀:怎么做好嵌入式?相信這個(gè)問題無(wú)論問誰(shuí)你都會(huì)得到一句學(xué)好C語(yǔ)言!今天推薦一大佬寫的嵌入式C語(yǔ)言知識(shí)點(diǎn)總結(jié),非常值得一讀。從語(yǔ)法上來(lái)說C
    發(fā)表于 12-15 07:43

    嵌入式C語(yǔ)言的知識(shí)點(diǎn)匯總,絕對(duì)實(shí)用

    了一些這方面的經(jīng)驗(yàn)和思考,就希望總結(jié)下來(lái),系統(tǒng)的闡述嵌入式C語(yǔ)言的重要知識(shí)點(diǎn),就是這篇文章的由來(lái)。本文以自己在嵌入式上的實(shí)踐為基礎(chǔ),在結(jié)合相關(guān)資料, 闡述
    發(fā)表于 02-17 06:10

    嵌入式知識(shí)點(diǎn)總結(jié)

    嵌入式知識(shí)點(diǎn)總結(jié)(arm嵌入式開發(fā)led過程)-嵌入式知識(shí)點(diǎn)
    發(fā)表于 07-30 14:20 ?23次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>知識(shí)點(diǎn)</b><b class='flag-5'>總結(jié)</b>

    嵌入式】基于ARM的嵌入式Linux開發(fā)總結(jié)

    前言嵌入式知識(shí)點(diǎn)復(fù)習(xí)一嵌入式知識(shí)點(diǎn)復(fù)習(xí)二 --體系結(jié)構(gòu)嵌入式知識(shí)點(diǎn)復(fù)習(xí)三 --ARM-LINUX
    發(fā)表于 10-19 18:32 ?26次下載
    【<b class='flag-5'>嵌入式</b>】基于ARM的<b class='flag-5'>嵌入式</b>Linux開發(fā)<b class='flag-5'>總結(jié)</b>

    嵌入式知識(shí)點(diǎn)

    嵌入式知識(shí)點(diǎn)復(fù)習(xí)一1、 嵌入式系統(tǒng)的一般組成結(jié)構(gòu)2、嵌入式硬件系統(tǒng)的結(jié)構(gòu)(1)嵌入式處理器+外圍硬件(2)常見的外圍硬件:電源、時(shí)鐘、內(nèi)存、
    發(fā)表于 10-21 12:06 ?6次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>知識(shí)點(diǎn)</b>

    嵌入式linux 開發(fā)小知識(shí)總結(jié)

    目標(biāo)? 博文旨在總結(jié)自己在嵌入式linux開發(fā)過程中遇到的坑?、一些小知識(shí)點(diǎn)的匯總。?等哪天發(fā)展到遠(yuǎn)離代碼了,還能回一下當(dāng)年的英姿。
    發(fā)表于 11-02 12:06 ?15次下載
    <b class='flag-5'>嵌入式</b>linux 開發(fā)小<b class='flag-5'>知識(shí)</b><b class='flag-5'>總結(jié)</b>

    嵌入式C語(yǔ)言知識(shí)點(diǎn)總結(jié)

    導(dǎo)讀:怎么做好嵌入式?相信這個(gè)問題無(wú)論問誰(shuí)你都會(huì)得到一句學(xué)好C語(yǔ)言!今天推薦一大佬寫的嵌入式C語(yǔ)言知識(shí)點(diǎn)總結(jié),非常值得一讀。
    的頭像 發(fā)表于 04-13 11:12 ?2641次閱讀

    C語(yǔ)言與C++面試知識(shí)點(diǎn)總結(jié)

    相對(duì)而言,C語(yǔ)言和C++相關(guān)的面試題比較少見,沒有Java方向?qū)懙娜四敲炊啵@是一 C 語(yǔ)言與 C++面試知識(shí)點(diǎn)總結(jié)的文章,個(gè)人感覺非常難
    的頭像 發(fā)表于 05-12 14:59 ?1404次閱讀

    C語(yǔ)言與C++面試知識(shí)點(diǎn)總結(jié)

    相對(duì)而言,C語(yǔ)言和C++相關(guān)的面試題比較少見,沒有Java方向?qū)懙娜四敲炊啵@是一 C 語(yǔ)言與 C++面試知識(shí)點(diǎn)總結(jié)的文章,個(gè)人感覺非常難
    的頭像 發(fā)表于 05-13 11:59 ?1795次閱讀