最近把 MDK 升級(jí)到了 V5.25 ,發(fā)現(xiàn) Managing Run-Time Environment 中已經(jīng)有好多好多的庫(kù)。相比之前已經(jīng)好了太多太多,從底層驅(qū)動(dòng),到上層協(xié)議棧,常用的有不常用的也有。發(fā)現(xiàn) ARM 對(duì)這套系統(tǒng)的更新速度加快了一些,覺(jué)得有必要學(xué)習(xí)一下。從驅(qū)動(dòng)開(kāi)始學(xué)起,先學(xué) USART API 詳細(xì)介紹見(jiàn) CMSIS Driver USART API
USART 把收到的數(shù)據(jù)再發(fā)出去程序
/**
******************************************************************************
* @file main.c
* @author XinLi
* @version v1.0
* @date 20-March-2018
* @brief Main program body.
******************************************************************************
* @attention
*
*
Copyright © 2018 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 "stm32f4xx.h"
#include "Driver_USART.h"
#include
/* Macro definitions ---------------------------------------------------------*/
/* Type definitions ----------------------------------------------------------*/
/* Variable declarations -----------------------------------------------------*/
extern ARM_DRIVER_USART Driver_USART1;
/* Variable definitions ------------------------------------------------------*/
static uint8_t rxBuffer[1024] = {0};
static uint8_t txBuffer[1024] = {0};
/* Function declarations -----------------------------------------------------*/
static void USART1_Callback(uint32_t event);
static void SystemClock_Config(void);
/* Function definitions ------------------------------------------------------*/
/**
* @brief Main program.
* @param None.
* @return None.
*/
int main(void)
{
/* STM32F4xx HAL library initialization:
- Configure the Flash prefetch, instruction and Data caches
- Configure the Systick to generate an interrupt each 1 msec
- Set NVIC Group Priority to 4
- Global MSP (MCU Support Package) initialization
*/
HAL_Init();
/* Configure the system clock to 168 MHz */
SystemClock_Config();
Driver_USART1.Initialize(USART1_Callback);
Driver_USART1.PowerControl(ARM_POWER_FULL);
Driver_USART1.Control(ARM_USART_MODE_ASYNCHRONOUS |
ARM_USART_DATA_BITS_8 |
ARM_USART_PARITY_NONE |
ARM_USART_STOP_BITS_1 |
ARM_USART_FLOW_CONTROL_NONE, 115200);
Driver_USART1.Control(ARM_USART_CONTROL_TX, 1);
Driver_USART1.Control(ARM_USART_CONTROL_RX, 1);
Driver_USART1.Receive(rxBuffer, sizeof(rxBuffer));
for(;;)
{
}
}
/**
* @brief USART1 callback function.
* @param event: USART events notification mask.
* @return None.
*/
static void USART1_Callback(uint32_t event)
{
if(event & ARM_USART_EVENT_RX_TIMEOUT)
{
Driver_USART1.Control(ARM_USART_ABORT_RECEIVE, 1);
uint32_t length = Driver_USART1.GetRxCount();
memcpy(txBuffer, rxBuffer, length);
Driver_USART1.Send(txBuffer, length);
Driver_USART1.Receive(rxBuffer, sizeof(rxBuffer));
}
}
/**
* @brief System Clock Configuration
* The system Clock is configured as follow :
* System Clock source = PLL (HSE)
* SYSCLK(Hz) = 168000000
* HCLK(Hz) = 168000000
* AHB Prescaler = 1
* APB1 Prescaler = 4
* APB2 Prescaler = 2
* HSE Frequency(Hz) = 8000000
* PLL_M = 8
* PLL_N = 336
* PLL_P = 2
* PLL_Q = 7
* VDD(V) = 3.3
* Main regulator output voltage = Scale1 mode
* Flash Latency(WS) = 5
* @param None
* @retval None
*/
static void SystemClock_Config(void)
{
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct;
/* Enable Power Control clock */
__HAL_RCC_PWR_CLK_ENABLE();
/* The voltage scaling allows optimizing the power consumption when the device is
clocked below the maximum system frequency, to update the voltage scaling value
regarding system frequency refer to product datasheet. */
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
/* Enable HSE Oscillator and activate PLL with HSE as source */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 336;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
/* Select PLL as system clock source and configure the HCLK, PCLK1 and PCLK2
clocks dividers */
RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5);
/* STM32F405x/407x/415x/417x Revision Z devices: prefetch is supported */
if (HAL_GetREVID() == 0x1001)
{
/* Enable the Flash prefetch */
__HAL_FLASH_PREFETCH_BUFFER_ENABLE();
}
}
上一篇:ARM CMSIS Driver 學(xué)習(xí) 之 SPI
下一篇:STM32F4 C++ 封裝庫(kù) 之 EXTI
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 神經(jīng)形態(tài)芯片可能是革新機(jī)器人實(shí)時(shí)電機(jī)控制的未來(lái)
- 從三個(gè)方面理解ARM嵌入式系統(tǒng)
- 自動(dòng)報(bào)警 基于MCU的家庭防盜報(bào)警系統(tǒng)的設(shè)計(jì)
- 存儲(chǔ)控制器及其訪問(wèn)外設(shè)的原理
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- ROHM推出“PFC+反激控制參考設(shè)計(jì)”,助力實(shí)現(xiàn)更小巧的電源設(shè)計(jì)!
- 實(shí)現(xiàn)自我溝通和與世界溝通的新方式
- 上汽集團(tuán)將推10萬(wàn)級(jí)半固態(tài)電池車(chē)型
- Bourns 推出其最小封裝尺寸 AEC-Q200 認(rèn)證車(chē)規(guī)級(jí)厚膜電阻
- 特斯拉大量使用激光雷達(dá)!
- 為何只有特斯拉采用PC芯片,而其他車(chē)企采用手機(jī)級(jí)車(chē)規(guī)芯片?
- 孚能科技:全固態(tài)電池進(jìn)入中試生產(chǎn)階段,計(jì)劃年底建成 0.2GWh 中試線
- 三星顯示獲梅賽德斯-邁巴赫S級(jí)48英寸OLED屏幕訂單
- Clearmotion全主動(dòng)懸掛系統(tǒng)將搭載保時(shí)捷,蔚來(lái)ET9已應(yīng)用
- R-SARC上車(chē)國(guó)產(chǎn)車(chē)型 京西智行讓智能底盤(pán)科技平權(quán)
- Digi-Key KOL視頻來(lái)襲~歡迎進(jìn)入MicroPython的奇妙世界
- 任選下載有禮| ADI 【鋰電池解決方案、參考電路合集】
- EEWorld邀你來(lái)拆解(第五期):拆拆排插學(xué)評(píng)電路
- ST MEMS傳感器交流論壇正式上線啦!
- ADI基于ADPD188BI的煙霧探測(cè)器集成解決方案 有獎(jiǎng)直播 5月13日上午10:00-11:30 為您揭曉!
- 免費(fèi)體驗(yàn)業(yè)界最快編譯速度&最好性能 Quartus II v15.0網(wǎng)頁(yè)版下載有禮!
- 【下載有禮】利用泰克新MSO6示波器 Spectrum View功能演示多通道信號(hào)頻譜分析
- 有獎(jiǎng)直播:是德科技測(cè)試測(cè)量峰會(huì)-高速數(shù)字論壇
- 泰克移動(dòng)多媒體總線系列專題來(lái)襲~《HDMI2.0規(guī)范測(cè)試方案》下載有禮!
- 小米正式遞交港股IPO申請(qǐng),雷軍目前持股31.4%
- 大小屏產(chǎn)業(yè)聯(lián)動(dòng),三星顯示力主雙線策略
- 力促5G商業(yè)化 三星加速萬(wàn)物互聯(lián)照進(jìn)現(xiàn)實(shí)
- 動(dòng)力電池市場(chǎng)洗牌加劇 寧德時(shí)代將一家獨(dú)大
- 智慧能源分析報(bào)告:能源互聯(lián)網(wǎng)研究方向與應(yīng)用動(dòng)態(tài)
- 全球能源互聯(lián)網(wǎng)明確“落地方案” 穩(wěn)步推進(jìn)中國(guó)能源互聯(lián)網(wǎng)
- 儒卓力最新推出多種尺寸和頻率的Kyocera振蕩器
- 寒武紀(jì)陳天石的公開(kāi)信—DianNao系列內(nèi)涵在于追求最極致性能
- 工信部:2018年Q1生產(chǎn)集成電路399.9億塊,手機(jī)4.2億臺(tái)
- 寒武紀(jì)科技重磅發(fā)布新一代云端 AI 芯片!
- 【NXP Rapid IoT評(píng)測(cè)】+第一天測(cè)評(píng)體會(huì)
- MCP73861-2充電管理控制器
- 請(qǐng)教開(kāi)關(guān)電源問(wèn)題
- 【Linux學(xué)習(xí)筆記3】 vim配置步驟
- MSP430 超頻工作
- 【Silicon Labs BG22-EK4108A 藍(lán)牙開(kāi)發(fā)評(píng)測(cè)】五、BG22藍(lán)牙功耗測(cè)試---絕對(duì)干貨
- 51單片機(jī)通過(guò)IIC協(xié)議讀取sht30傳感器模塊的溫濕度數(shù)據(jù)
- 跪求大神指點(diǎn),上位機(jī)與串口通信的問(wèn)題,緊急求助
- Ti CC2540藍(lán)牙模塊學(xué)習(xí)筆記整理
- 如何學(xué)習(xí)PLC的心得分享