在實(shí)際的項(xiàng)目開(kāi)發(fā)過(guò)程中,常常會(huì)遇到硬件電路的修改,然后修改的部分就需要修改驅(qū)動(dòng)程序。想這樣需求該來(lái)該去是程序員們最煩悶的事情(重復(fù)勞動(dòng)痛不欲生啊~)。為了避免或減少重復(fù)勞動(dòng),就需要在程序的架構(gòu)上下功夫。接下來(lái)以最常見(jiàn)的KEY驅(qū)動(dòng)程序?yàn)槔M(jìn)行程序結(jié)構(gòu)設(shè)計(jì)。
1,開(kāi)發(fā)環(huán)境
1,固件庫(kù):STM32F4xx_DSP_StdPeriph_Lib_V1.8.0
2,編譯器:ARMCC V5.06
3,IDE:Keil uVision5
4,操作系統(tǒng):Windows 10 專業(yè)版
2,程序源碼
KEY.h文件
/**
******************************************************************************
* @file KEY.h
* @author XinLi
* @version v1.0
* @date 24-October-2017
* @brief Header file for KEY.c module.
******************************************************************************
* @attention
*
*
Copyright © 2017 XinLi
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
*
******************************************************************************
*/
#ifndef __KEY_H
#define __KEY_H
#ifdef __cplusplus
extern "C" {
#endif
/* Header includes -----------------------------------------------------------*/
#include "stm32f4xx.h"
/* Macro definitions ---------------------------------------------------------*/
#define KEYn (3)
#define KEY1_RCC_AHB1Periph_GPIO RCC_AHB1Periph_GPIOC
#define KEY1_GPIO GPIOC
#define KEY1_GPIO_Pin GPIO_Pin_2
#define KEY2_RCC_AHB1Periph_GPIO RCC_AHB1Periph_GPIOC
#define KEY2_GPIO GPIOC
#define KEY2_GPIO_Pin GPIO_Pin_3
#define KEY3_RCC_AHB1Periph_GPIO RCC_AHB1Periph_GPIOC
#define KEY3_GPIO GPIOC
#define KEY3_GPIO_Pin GPIO_Pin_4
#define KEY_RCC_APB1Periph_TIM RCC_APB1Periph_TIM2
#define KEY_TIM TIM2
#define KEY_TIM_Prescaler (83) /*!< Clock divided to 1MHz. */
#define KEY_TIM_Period (4999) /*!< 5ms timer interrupt. */
#define KEY_TIM_IRQn TIM2_IRQn
#define KEY_TIM_IRQHandler TIM2_IRQHandler
#define KEY_TIM_IRQ_PreemptionPriority (0)
#define KEY_TIM_IRQ_SubPriority (0)
#define KEY_PRESS_STATUS Bit_SET
/* Type definitions ----------------------------------------------------------*/
typedef enum
{
KEY_Pin1 = 0,
KEY_Pin2 = 1,
KEY_Pin3 = 2
}KEY_Pin;
typedef enum
{
KEY_NoPress = 0,
KEY_ShortPress = 1,
KEY_LongPress = 2
}KEY_Status;
/* Variable declarations -----------------------------------------------------*/
/* Variable definitions ------------------------------------------------------*/
/* Function declarations -----------------------------------------------------*/
void KEY_Init(void);
void KEY_DeInit(void);
KEY_Status KEY_GetStatus(KEY_Pin pin);
void KEY_SetShortPressCallback(KEY_Pin pin, void (*fun)(void));
void KEY_SetLongPressCallback(KEY_Pin pin, void (*fun)(void));
void KEY_ClearShortPressCallback(KEY_Pin pin);
void KEY_ClearLongPressCallback(KEY_Pin pin);
/* Function definitions ------------------------------------------------------*/
#ifdef __cplusplus
}
#endif
#endif /* __KEY_H */
KEY.c文件
/**
******************************************************************************
* @file KEY.c
* @author XinLi
* @version v1.0
* @date 24-October-2017
* @brief KEY module driver.
******************************************************************************
* @attention
*
*
Copyright © 2017 XinLi
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
*
******************************************************************************
*/
/* Header includes -----------------------------------------------------------*/
#include "KEY.h"
#include
/* Macro definitions ---------------------------------------------------------*/
/* Type definitions ----------------------------------------------------------*/
/* Variable declarations -----------------------------------------------------*/
/* Variable definitions ------------------------------------------------------*/
static GPIO_TypeDef *KEY_GPIO[KEYn] = {KEY1_GPIO, KEY2_GPIO, KEY3_GPIO};
static uint16_t KEY_GPIO_Pin[KEYn] = {KEY1_GPIO_Pin, KEY2_GPIO_Pin, KEY3_GPIO_Pin};
static uint32_t KEY_RCC_AHB1Periph_GPIO[KEYn] = {KEY1_RCC_AHB1Periph_GPIO, KEY2_RCC_AHB1Periph_GPIO, KEY3_RCC_AHB1Periph_GPIO};
static __IO int keyInputHighCount[KEYn] = {0};
static __IO int keyInputLowCount[KEYn] = {0};
static __IO KEY_Status keyStatus[KEYn] = {KEY_NoPress, KEY_NoPress, KEY_NoPress};
static __IO KEY_Status keyGetStatus[KEYn] = {KEY_NoPress, KEY_NoPress, KEY_NoPress};
static __IO void (*keyShortPressCallback[KEYn])(void) = {NULL};
static __IO void (*keyLongPressCallback[KEYn])(void) = {NULL};
/* Function declarations -----------------------------------------------------*/
/* Function definitions ------------------------------------------------------*/
/**
* @brief Key initializes.
* @param None.
* @return None.
*/
void KEY_Init(void)
{
for(int i = 0; i < KEYn; i++)
{
GPIO_InitTypeDef GPIO_InitStructure = {0};
RCC_AHB1PeriphClockCmd(KEY_RCC_AHB1Periph_GPIO[i], ENABLE);
GPIO_InitStructure.GPIO_Pin = KEY_GPIO_Pin[i];
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_Init(KEY_GPIO[i], &GPIO_InitStructure);
keyInputHighCount[i] = 0;
keyInputLowCount[i] = 0;
keyStatus[i] = KEY_NoPress;
keyGetStatus[i] = KEY_NoPress;
keyShortPressCallback[i] = NULL;
keyLongPressCallback[i] = NULL;
}
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure = {0};
RCC_APB1PeriphClockCmd(KEY_RCC_APB1Periph_TIM, ENABLE);
TIM_TimeBaseInitStructure.TIM_Prescaler = KEY_TIM_Prescaler;
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStructure.TIM_Period = KEY_TIM_Period;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInit(KEY_TIM, &TIM_TimeBaseInitStructure);
TIM_ClearFlag(KEY_TIM, TIM_FLAG_Update);
TIM_ITConfig(KEY_TIM, TIM_IT_Update, ENABLE);
TIM_Cmd(KEY_TIM, ENABLE);
NVIC_InitTypeDef NVIC_InitStructure = {0};
NVIC_InitStructure.NVIC_IRQChannel = KEY_TIM_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = KEY_TIM_IRQ_PreemptionPriority;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = KEY_TIM_IRQ_SubPriority;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/**
* @brief Key de-initializes.
* @param None.
* @return None.
*/
void KEY_DeInit(void)
{
for(int i = 0; i < KEYn; i++)
{
keyInputHighCount[i] = 0;
keyInputLowCount[i] = 0;
keyStatus[i] = KEY_NoPress;
keyGetStatus[i] = KEY_NoPress;
keyShortPressCallback[i] = NULL;
keyLongPressCallback[i] = NULL;
}
TIM_DeInit(KEY_TIM);
RCC_APB1PeriphClockCmd(KEY_RCC_APB1Periph_TIM, DISABLE);
NVIC_InitTypeDef NVIC_InitStructure = {0};
NVIC_InitStructure.NVIC_IRQChannel = KEY_TIM_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = KEY_TIM_IRQ_PreemptionPriority;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = KEY_TIM_IRQ_SubPriority;
NVIC_InitStructure.NVIC_IRQChannelCmd = DISABLE;
NVIC_Init(&NVIC_InitStructure);
}
/**
* @brief Get key status.
* @param [in] pin: That key.
* @return Key status.
*/
KEY_Status KEY_GetStatus(KEY_Pin pin)
{
KEY_Status status = KEY_NoPress;
if(keyGetStatus[pin] != KEY_NoPress)
{
status = keyGetStatus[pin];
keyGetStatus[pin] = KEY_NoPress;
}
return status;
}
/**
* @brief Set key short press callback.
* @param [in] pin: That key.
* @param [in] fun: Function pointer.
* @return None.
*/
void KEY_SetShortPressCallback(KEY_Pin pin, void (*fun)(void))
{
keyShortPressCallback[pin] = (__IO void (*)(void))fun;
}
/**
* @brief Set key long press callback.
* @param [in] pin: That key.
* @param [in] fun: Function pointer.
* @return None.
*/
void KEY_SetLongPressCallback(KEY_Pin pin, void (*fun)(void))
{
keyLongPressCallback[pin] = (__IO void (*)(void))fun;
}
/**
* @brief Clear key short press callback.
* @param [in] pin: That key.
* @param [in] fun: Function pointer.
* @return None.
*/
void KEY_ClearShortPressCallback(KEY_Pin pin)
{
keyShortPressCallback[pin] = NULL;
}
/**
* @brief Clear key long press callback.
* @param [in] pin: That key.
* @param [in] fun: Function pointer.
* @return None.
*/
void KEY_ClearLongPressCallback(KEY_Pin pin)
{
keyLongPressCallback[pin] = NULL;
}
/**
* @brief This function handles TIM Handler.
* @param None.
* @return None.
*/
void KEY_TIM_IRQHandler(void)
{
if(TIM_GetITStatus(KEY_TIM, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(KEY_TIM, TIM_IT_Update);
for(int i = 0; i < KEYn; i++)
{
if(GPIO_ReadInputDataBit(KEY_GPIO[i], KEY_GPIO_Pin[i]) == KEY_PRESS_STATUS)
{
keyInputLowCount[i]++;
if(keyInputLowCount[i] > 1)
{
keyInputHighCount[i] = 0;
}
if(keyInputLowCount[i] > 100)
{
keyInputLowCount[i] = 0;
keyStatus[i] = KEY_LongPress;
keyGetStatus[i] = KEY_LongPress;
if(keyLongPressCallback[i] != NULL)
{
keyLongPressCallback[i]();
}
}
}
else
{
keyInputHighCount[i]++;
if(keyInputHighCount[i] > 1)
{
if((keyStatus[i] == KEY_NoPress) && (keyInputLowCount[i] > 1))
{
keyInputHighCount[i] = 0;
keyInputLowCount[i] = 0;
keyStatus[i] = KEY_ShortPress;
keyGetStatus[i] = KEY_ShortPress;
if(keyShortPressCallback[i] != NULL)
{
keyShortPressCallback[i]();
}
}
else
{
keyInputHighCount[i] = 0;
keyInputLowCount[i] = 0;
keyStatus[i] = KEY_NoPress;
}
}
}
}
}
}
main.c文件
/**
******************************************************************************
* @file main.c
* @author XinLi
* @version v1.0
* @date 24-October-2017
* @brief Main program body.
******************************************************************************
* @attention
*
*
Copyright © 2017 XinLi
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
*
******************************************************************************
*/
/* Header includes -----------------------------------------------------------*/
#include "main.h"
#include "KEY.h"
/* Macro definitions ---------------------------------------------------------*/
/* Type definitions ----------------------------------------------------------*/
/* Variable declarations -----------------------------------------------------*/
/* Variable definitions ------------------------------------------------------*/
static __IO int key1ShortPressCount = 0;
static __IO int key1LongPressCount = 0;
static __IO int key2ShortPressCount = 0;
static __IO int key2LongPressCount = 0;
/* Function declarations -----------------------------------------------------*/
static void key1ShortPressCallback(void);
static void key1LongPressCallback(void);
/* Function definitions ------------------------------------------------------*/
/**
* @brief Main program.
* @param None.
* @return None.
*/
int main(void)
{
KEY_Init();
KEY_SetShortPressCallback(KEY_Pin1, key1ShortPressCallback);
KEY_SetLongPressCallback(KEY_Pin1, key1LongPressCallback);
for(;;)
{
KEY_Status status = KEY_GetStatus(KEY_Pin2);
if(status != KEY_NoPress)
{
if(status == KEY_ShortPress)
{
key2ShortPressCount++;
}
else
{
key2LongPressCount++;
}
}
}
}
/**
* @brief Key 1 short press callback.
* @param None.
* @return None.
*/
static void key1ShortPressCallback(void)
{
key1ShortPressCount++;
}
/**
* @brief Key 1 long press callback.
* @param None.
* @return None.
*/
static void key1LongPressCallback(void)
{
key1LongPressCount++;
}
3,注意
修改接口需要注意,按鍵的檢測(cè)電平、使用的TIM和增減按鍵的個(gè)數(shù)。對(duì)應(yīng)修改KEY_PRESS_STATUS宏、TIM時(shí)鐘配置函數(shù)和源文件的變量定義。
上一篇:STM32F4(BUZZ)
下一篇:STM32F4(LED)
推薦閱讀
史海拾趣
在20世紀(jì)80年代初,Electro-Films Inc. 的創(chuàng)始人意識(shí)到了電子行業(yè)中對(duì)高性能薄膜材料的需求日益增加。因此,公司決定成立一個(gè)專門(mén)負(fù)責(zé)薄膜材料研發(fā)的部門(mén),即Semi-Films Division。這個(gè)部門(mén)在成立之初就面臨著巨大的挑戰(zhàn),但團(tuán)隊(duì)?wèi){借對(duì)技術(shù)的執(zhí)著追求和不懈努力,成功開(kāi)發(fā)出了具有優(yōu)良電氣性能和機(jī)械性能的薄膜產(chǎn)品,為公司贏得了首批客戶。
進(jìn)入21世紀(jì)后,隨著全球電子產(chǎn)業(yè)的蓬勃發(fā)展,Semi-Films Division 開(kāi)始積極拓展國(guó)際市場(chǎng)。公司參加了多個(gè)國(guó)際性的電子產(chǎn)品展覽會(huì),與全球各地的客戶建立了聯(lián)系。同時(shí),公司還加大了對(duì)海外市場(chǎng)的投入,設(shè)立了多個(gè)海外辦事處和代理商,為客戶提供更加便捷的服務(wù)。這些舉措使得 Semi-Films 的產(chǎn)品逐漸走向世界,成為國(guó)際知名的薄膜材料供應(yīng)商。
隨著電子技術(shù)的快速發(fā)展,Honda Tsushin Kogyo不斷加大研發(fā)投入,致力于技術(shù)創(chuàng)新和產(chǎn)品升級(jí)。公司可能引入了先進(jìn)的生產(chǎn)設(shè)備和技術(shù)人才,推動(dòng)了產(chǎn)品線的拓展。從最初的簡(jiǎn)單連接器產(chǎn)品,逐步發(fā)展到包括Board To Board、Board To Cable、Cable To Cable、I/O、Card、Coxial、Optical、Power等在內(nèi)的多種電子連接器產(chǎn)品。這些產(chǎn)品廣泛應(yīng)用于通信、計(jì)算機(jī)、汽車(chē)、航空航天等多個(gè)領(lǐng)域,為公司帶來(lái)了更廣闊的市場(chǎng)空間。
2014年5月19日,ConnectBlue公司被全球領(lǐng)先的定位與無(wú)線通信技術(shù)公司u-blox收購(gòu)。這一收購(gòu)為ConnectBlue公司帶來(lái)了新的發(fā)展機(jī)遇和更廣闊的市場(chǎng)空間。在u-blox的支持下,ConnectBlue公司得以進(jìn)一步加大研發(fā)投入,拓展產(chǎn)品線,提升產(chǎn)品品質(zhì)和服務(wù)水平。同時(shí),公司還借助u-blox的全球銷(xiāo)售網(wǎng)絡(luò)和品牌影響力,進(jìn)一步開(kāi)拓國(guó)際市場(chǎng),實(shí)現(xiàn)了新的跨越式發(fā)展。
在電子行業(yè)的發(fā)展歷程中,技術(shù)突破一直是推動(dòng)公司成長(zhǎng)和市場(chǎng)擴(kuò)張的關(guān)鍵因素。假設(shè)ATC在某一時(shí)期成功研發(fā)出了一種新型的陶瓷材料,這種材料在耐高溫、抗腐蝕等方面具有顯著優(yōu)勢(shì),因此被廣泛應(yīng)用于半導(dǎo)體制造和電子設(shè)備領(lǐng)域。這一技術(shù)突破使得ATC的產(chǎn)品在市場(chǎng)上獲得了極高的認(rèn)可,公司也因此實(shí)現(xiàn)了快速的收入增長(zhǎng)和市場(chǎng)占有率的提升。
FIDELIX公司成立于1990年,是一家專注于存儲(chǔ)芯片研發(fā)與銷(xiāo)售的韓國(guó)企業(yè)。在公司成立初期,F(xiàn)IDELIX憑借對(duì)技術(shù)的深入研究和對(duì)市場(chǎng)的敏銳洞察,成功推出了多款性能優(yōu)越的NAND FLASH(閃存)和SDR/DDR(單/雙數(shù)率同步動(dòng)態(tài)存儲(chǔ)器)等存儲(chǔ)芯片產(chǎn)品。這些產(chǎn)品不僅在韓國(guó)市場(chǎng)上獲得了良好的口碑,同時(shí)也開(kāi)始逐步進(jìn)入國(guó)際市場(chǎng)。
隨著技術(shù)的不斷進(jìn)步和市場(chǎng)的不斷擴(kuò)大,F(xiàn)IDELIX逐漸在韓國(guó)存儲(chǔ)芯片領(lǐng)域嶄露頭角。公司不斷投入研發(fā)資金,加強(qiáng)技術(shù)創(chuàng)新,努力提升產(chǎn)品的性能和品質(zhì)。同時(shí),F(xiàn)IDELIX也積極拓展銷(xiāo)售渠道,與多家國(guó)內(nèi)外知名廠商建立了合作關(guān)系,為公司的持續(xù)發(fā)展奠定了堅(jiān)實(shí)的基礎(chǔ)。
DALLAS最新單線數(shù)字溫度傳感器DS18B20簡(jiǎn)介新的“一線器件”體積更小、適用電壓更寬、更經(jīng)濟(jì) Dallas 半導(dǎo)體公司的數(shù)字化溫度傳感器DS1820是世界上第一片支持 “一線總線”接口的溫度傳感器。一線總線獨(dú)特而且經(jīng)濟(jì)的特點(diǎn),使用戶可輕松地組建傳感器網(wǎng) ...… 查看全部問(wèn)答∨ |
一. 定義 由人們主觀設(shè)想的在網(wǎng)孔中流動(dòng)的電流稱為網(wǎng)孔電流,如圖3-3-1中的iⅠ,iⅡ,iⅢ所示,它們的大小和參考方向均是任意設(shè)定的。以網(wǎng)孔電流為待求變量,根據(jù)KVL對(duì)各網(wǎng)孔列寫(xiě)出KVL約束方程而對(duì)電路進(jìn)行分析的方法稱為網(wǎng)孔電流法,簡(jiǎn) ...… 查看全部問(wèn)答∨ |
大家好,我現(xiàn)在急需六路搶答器的電路設(shè)計(jì),望大家能夠幫小妹一把!!! 要求: 設(shè)計(jì)制作一個(gè)可以容納六組參賽的數(shù)字式搶答器,每組設(shè)置一個(gè)搶答按紐供搶答者使用; 電路具有第一搶答信號(hào)的鑒別和鎖存功能,在主持人將系統(tǒng)復(fù)位并發(fā)出搶答指令后, ...… 查看全部問(wèn)答∨ |
實(shí)現(xiàn)低漏電流同時(shí)保證EMI性能的電源設(shè)計(jì) 在AC-DC開(kāi)關(guān)電源中,漏電流最主要的來(lái)源是Y類(lèi)電容。通過(guò)使用變壓器屏蔽繞組或在輸入級(jí)加入一個(gè)扼流圈,可以顯著地降低Y電容的數(shù)值或在某些場(chǎng)合去除它,從而降低漏電流并且仍滿足有一定裕量的傳導(dǎo)EMI限制。實(shí)現(xiàn)這些目標(biāo)的解決方案會(huì)在本文得到分析。 ...… 查看全部問(wèn)答∨ |
【原創(chuàng)】便攜式生理參數(shù)監(jiān)測(cè)儀設(shè)計(jì) 本帖最后由 paulhyde 于 2014-9-15 09:25 編輯 分享下我的本科畢業(yè)設(shè)計(jì)吧,內(nèi)容還是比較簡(jiǎn)單的,供大家參考~~~~ 本設(shè)計(jì)可實(shí)時(shí)檢測(cè)人體的體溫、脈搏,可測(cè)量人體運(yùn)動(dòng)的步數(shù),計(jì)算行進(jìn)距離以及消耗的卡路里(熱量)~~ 硬件:C8051F330、ZLG7289B、 ...… 查看全部問(wèn)答∨ |
|
[hide]表面粘著型LED的出現(xiàn)是在1980年初,是因應(yīng)更小型封裝和工廠自動(dòng)化而生。初期廠商裹足不前,主要因素是表面粘著LED最早面臨的問(wèn)題是無(wú)法完成高溫紅外線下焊錫回流的步驟。LED的比熱較IC低,溫度升高時(shí)不僅會(huì)造成亮度下降,且超過(guò)攝氏100度時(shí)將 ...… 查看全部問(wèn)答∨ |
我想問(wèn)下,在xp環(huán)境的evc工程里我創(chuàng)建了一個(gè)exe工程,但是調(diào)試的時(shí)候彈出一個(gè)wince的窗體,而程序卻連接不上,是什么原因啊? 有沒(méi)有更好的調(diào)試方法,小弟初學(xué)wince,請(qǐng)多指教… 查看全部問(wèn)答∨ |
Win32 SDK 用GetMenuItemInfo獲取菜單標(biāo)題用SetMenuItemInfo設(shè)置菜單標(biāo)題 非MFC ATL,Win32 SDK 用GetMenuItemInfo獲取菜單標(biāo)題用SetMenuItemInfo設(shè)置菜單標(biāo)題。哪位高手有經(jīng)驗(yàn),給點(diǎn)兒代碼,我自己的代碼用GetLastError用是返回87,快暈了!help me!! 代碼: MENUITEMINFO mii; ...… 查看全部問(wèn)答∨ |
keil中怎么用結(jié)構(gòu),聯(lián)合定義位變量? keil中怎么用結(jié)構(gòu),聯(lián)合定義位變量?我在ARM中這么定義正確嗎? typedef union _MAC_FRAME_CONTROL{ WORD_VAL word; struct _MAC_FRAME_CONTROL_bits { &nbs ...… 查看全部問(wèn)答∨ |
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 英飛凌微控制器:以全新實(shí)惠套件和強(qiáng)大開(kāi)發(fā)環(huán)境為開(kāi)發(fā)者提供支持
- iTOP-i.MX6開(kāi)發(fā)板設(shè)備數(shù)驅(qū)動(dòng)Menuconfig的用法
- 迅為IMX6ULL開(kāi)發(fā)板Qt for Android搭建開(kāi)發(fā)環(huán)境
- 迅為i.MX8M mini開(kāi)發(fā)板Windots QT系統(tǒng)開(kāi)發(fā)環(huán)境搭建
- 迅為IMX8MM開(kāi)發(fā)板Yocto系統(tǒng)使用Gstarwmra(一)
- 迅為IMX8M mini開(kāi)發(fā)板Linix系統(tǒng)修改默認(rèn)屏幕
- iTOP-4412開(kāi)發(fā)板支持4G以上文件系統(tǒng)擴(kuò)展
- 迅為IMX8MM開(kāi)發(fā)板Yocto系統(tǒng)設(shè)置開(kāi)機(jī)自啟動(dòng)
- 迅為IMX6Q開(kāi)發(fā)板 Buildroot文件系統(tǒng)mqtt測(cè)試
- AI算力狂飆下的能源困局,ST如何突圍?
- 韓國(guó)研究人員開(kāi)發(fā)出耐火電池電解質(zhì)以防止熱失控
- “史上最嚴(yán)電池安全令”或引發(fā)產(chǎn)業(yè)第四次大洗牌
- 現(xiàn)代汽車(chē)發(fā)布新一代混動(dòng)系統(tǒng),燃油效率提升45%
- 三星顯示將全面采用雙棧串聯(lián)技術(shù)提升車(chē)載OLED性能
- 禾賽科技計(jì)劃2026年推L3級(jí)智駕專用激光雷達(dá)“千厘眼”
- 寧德時(shí)代發(fā)布驍遙雙核電池:跨體系技術(shù)革新,續(xù)航超1000km
- 寧德時(shí)代發(fā)布全球首款800km續(xù)航12C超充磷酸鐵鋰電池
- 華為發(fā)布全液冷超充技術(shù),15分鐘充電90%革新重卡市場(chǎng)
- 車(chē)規(guī)級(jí)MCU介紹
- 有獎(jiǎng)直播:ADI 慣性 MEMS 傳感器的應(yīng)用價(jià)值與選型
- 闖關(guān)贏優(yōu)惠券,蝴蝶粉最低可29元體驗(yàn)NUCLEO-L452RE
- 答題贏京東卡|PI InnoSwitch產(chǎn)品系列學(xué)習(xí)中心
- 炎炎盛夏,EEWORLD社區(qū)6月明星人物出爐嘍!
- 電子工程師,如何更好地?fù)肀aN?參與問(wèn)卷有好禮!
- Microchip電源評(píng)估板促銷(xiāo),還有紅包送!
- 【已結(jié)束】 電感應(yīng)用知識(shí)分享|MPS 有獎(jiǎng)直播
- 一起“充電”,DIY自己專屬應(yīng)急燈
- 好消息!返現(xiàn)+抽獎(jiǎng),雙重好禮助力openmv技術(shù)學(xué)習(xí)!
- TWS耳機(jī)的發(fā)展歷程與未來(lái)
- 美光牽手摩托羅拉,新機(jī)motorola edge+搭載低功耗DDR5 DRAM
- 從中美日政策風(fēng)向標(biāo)中,讀取自動(dòng)駕駛發(fā)展進(jìn)度條
- 一鍵呼叫、免費(fèi)搭乘,無(wú)人出租車(chē)為何能這座城市率先開(kāi)通
- 特斯拉AP3.0域控制器(下)車(chē)載以太交換器
- 激光焊錫設(shè)備的誤解有哪些?
- 掃地機(jī)器人哪個(gè)牌子好?買(mǎi)過(guò)都說(shuō)好的5大品牌!
- 普渡機(jī)器人亮相廣州國(guó)際餐飲連鎖加盟展
- 地平線攜手全志科技打造嵌入式人工智能一站式解決方案
- 動(dòng)蕩的業(yè)績(jī)與股價(jià),藍(lán)思科技增長(zhǎng)現(xiàn)疲態(tài)