最近把 MDK 升級到了 V5.25 ,發現 Managing Run-Time Environment 中已經有好多好多的庫。相比之前已經好了太多太多,從底層驅動,到上層協議棧,常用的有不常用的也有。發現 ARM 對這套系統的更新速度加快了一些,覺得有必要學習一下。從驅動開始學起,先學 USART API 詳細介紹見 CMSIS Driver USART API
USART 把收到的數據再發出去程序
/**
******************************************************************************
* @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 學習 之 SPI
下一篇:STM32F4 C++ 封裝庫 之 EXTI
推薦閱讀
史海拾趣
Elma致力于為個人應用量身定制解決方案,通過豐富的包裝電子系統實踐經驗,確保能夠快速、經濟地開發出滿足客戶需求的定制解決方案。這種能力得益于其內部制造能力,確保了產品的兼容性和一致性。同時,Elma還提供設計/集成服務,以及響應迅速且知識淵博的技術支持。
Apex Microtechnology成立于1980年,自創立之初,公司便專注于功率模擬技術的研發,為工業、國防和航空航天等領域提供高精確控制電流、電壓和速度的解決方案。憑借其在功率驅動器和放大器領域的專業知識,Apex Microtechnology逐漸在電子行業中嶄露頭角,吸引了眾多客戶的關注。
Daco Semiconductor在成立之初就專注于半導體技術的研發與創新。公司由一群對半導體行業充滿熱情的工程師創立,他們致力于開發更高效、更穩定的半導體產品。一次偶然的實驗中,Daco的研發團隊發現了一種新型的材料組合,這種材料組合能夠顯著提高半導體的性能和穩定性。這一技術突破成為了Daco的核心競爭力,也為其在競爭激烈的半導體市場中打開了新的局面。
作為一家有影響力的企業,eLED.com Corp始終關注社會責任的履行。公司積極參與各類公益活動,關注教育、環保和扶貧等領域。通過捐款捐物、志愿服務等方式,eLED.com Corp為社會做出了積極的貢獻。此外,公司還注重員工培訓和福利待遇的提升,努力為員工創造一個良好的工作環境和發展空間。通過這些舉措的實施,eLED.com Corp不僅贏得了社會的廣泛贊譽和支持,還為企業的發展注入了新的動力。
隨著技術的不斷進步,ATOP Technologies意識到要想在激烈的市場競爭中保持領先地位,必須不斷進行技術創新和產品升級。因此,公司加大了在研發方面的投入,積極引進高端人才,加強與高校和研究機構的合作。經過多年的努力,ATOP Technologies成功開發出了一系列具有自主知識產權的工業自動化產品,并在市場上取得了良好的口碑。
2020年4月,ABLIC成為MinebeaMitsumi集團的一員。這一合作對于ABLIC來說具有重要意義。MinebeaMitsumi集團作為一家在電子元器件領域具有強大實力的企業,為ABLIC提供了更廣闊的發展空間和資源支持。通過融入MinebeaMitsumi集團的“八矛戰略”,ABLIC的模擬半導體業務得到了進一步提升,其在集團內部的地位也愈發重要。
前言 人生約有三分之一的時間在睡眠中度過,良好的睡眠是保證身體健康的必要條件。睡眠呼吸暫停癥(sleep apnea)是一種很常見的睡眠呼吸疾病,據調查,在美國約有24%的成年男性及9%成年女 ...… 查看全部問答∨ |
|
eboot 中設置好了 IP 地址和 MAC 地址,選擇 D 開始下載。串口輸出一系列 Sent BOOTME to 255.255.255.255,但是在PB下面始終找不到設備,這個大概是什么原因? … 查看全部問答∨ |
|
請高手幫忙: 問下tornado的安裝過程中,如果從開始菜單直接運行tornado,會提示錯誤,這是因為安裝還沒有完成,在C盤Tornado2.2文件夾下你會發現一個setup.log文件,用ultraedit或vim打開,在最后一行你會發現一個注冊表鍵值,進入注冊表,找到這 ...… 查看全部問答∨ |
|
我想問一下,單片機項目開發,是從硬件開始,然后是軟件,比如我做一個簡單的流水燈試驗,要買哪些零件啊,并且如何焊接啊, 如何設計原理圖啊,我真的不知道從何下手,高手教教我啊,謝謝了… 查看全部問答∨ |
s3c2410的板子 IICCON=IICCON_ACKEN|IICCON_CLK512|IICCON_INTR|IICCON_CLKPRE(0x3) 這條設置的波特率是多少?有誰知道嗎? 還有若要設置成9600bps應該如何修改?… 查看全部問答∨ |