娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

一例使用STM32外設(shè)庫(kù)設(shè)置串口速度與實(shí)際不一樣的解決

發(fā)布者:genius6最新更新時(shí)間:2024-10-22 來(lái)源: cnblogs關(guān)鍵字:STM32  外設(shè)庫(kù) 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

最近手上有了塊金牛的stm32實(shí)驗(yàn)板,興致勃勃的測(cè)試各種功能,但是碰到一個(gè)問(wèn)題,用stm32 的外設(shè)庫(kù)寫(xiě)串口程序,發(fā)現(xiàn)串口速度與實(shí)際不一樣。一度懷疑是外設(shè)庫(kù)的問(wèn)題,但是用mdk的外設(shè)監(jiān)控查看后,發(fā)現(xiàn)實(shí)際的串口速度為自定義的3倍,如圖
很疑惑,本人有一種鉆牛角尖的精神,因此一度debug下去,發(fā)現(xiàn)這個(gè)設(shè)置是在如下關(guān)鍵語(yǔ)句
(位于 外設(shè)庫(kù) 中的 USART_Init定義語(yǔ)句,在stm32f10x_usart.c中)
USART_Init初始化函數(shù)

RCC_GetClocksFreq(&RCC_ClocksStatus);
if (usartxbase == USART1_BASE)
{
apbclock = RCC_ClocksStatus.PCLK2_Frequency;
}
else
{
apbclock = RCC_ClocksStatus.PCLK1_Frequency;
}

integerdivider = ((0x19 * apbclock) / (0x04 * (USART_InitStruct->USART_BaudRate)));
tmpreg = (integerdivider / 0x64) << 0x04;

fractionaldivider = integerdivider - (0x64 * (tmpreg >> 0x04));
tmpreg |= ((((fractionaldivider * 0x10) + 0x32) / 0x64)) & ((uint8_t)0x0F);

USARTx->BRR = (uint16_t)tmpreg;
其中,最關(guān)鍵的是在
apbclock = RCC_ClocksStatus.PCLK2_Frequency;這一句,其他都以此來(lái)進(jìn)行加減乘除得到相應(yīng)的寄存器數(shù)值,debug的時(shí)候發(fā)現(xiàn)這個(gè)值為16M,但是,我本人的外部晶振是25M,經(jīng)過(guò)pll倍頻后市50M,和這個(gè)不一樣。

是沒(méi)錯(cuò)的,但是,這個(gè)apbclock是怎么得出的16兆的,繼續(xù)深入stm32f10x_rcc.c里面RCC_GetClocksFreq定義查看,查看到如下結(jié)果
switch (tmp)
{
case 0x00:
RCC_Clocks->SYSCLK_Frequency = HSI_Value;
break;
case 0x04:
RCC_Clocks->SYSCLK_Frequency = HSE_Value;
break;
case 0x08:


pllmull = RCC->CFGR & CFGR_PLLMull_Mask;
pllsource = RCC->CFGR & CFGR_PLLSRC_Mask;


我是采用外部晶振作為系統(tǒng)時(shí)鐘的,也就是這里的case 0x04,
RCC_Clocks->SYSCLK_Frequency = HSE_Value;
來(lái)源于此HSE_Value;查看默認(rèn)的采用外部晶振的定義是8000000,也就是說(shuō),如果你的系統(tǒng)的外部晶振不是8M,這個(gè)速度計(jì)算就會(huì)錯(cuò),我的系統(tǒng)是25兆,差了接近三倍,與檢測(cè)到的錯(cuò)誤速度一致,用查找搜索HSE_Value的定義,改成25000000就好了。系統(tǒng)完美運(yùn)行,這算是這幾天一直迷惑有了一個(gè)完美的答案吧
我圖方便是把整個(gè)項(xiàng)目的HSI_Value都改成了2500000,大家可以去stm32f10x.h里修改。


關(guān)鍵字:STM32  外設(shè)庫(kù) 引用地址:一例使用STM32外設(shè)庫(kù)設(shè)置串口速度與實(shí)際不一樣的解決

上一篇:對(duì)STM32 NIVC的了解
下一篇:STM32紅牛開(kāi)發(fā)板非固件庫(kù)控制LED

推薦閱讀最新更新時(shí)間:2025-05-08 11:40

PIC32MX單片機(jī)外設(shè)庫(kù)使用(Ⅲ)-- 定時(shí)器之輸入捕捉功能
1.如何使用定時(shí)器的捕捉功能。 簡(jiǎn)介:輸入捕捉功能在頻率(或周期)、脈沖寬度測(cè)量的應(yīng)用中非常有用。 #define FOSC 80E6 //定義主系統(tǒng)時(shí)鐘為80M #define PB_DIV 8 //定義系統(tǒng)外設(shè)分頻器為8 #define PRESCALE 8 // 定義定時(shí)器分頻器為256 #define MSEC 10E-3 #define T1_TICK (500 * MSEC * FOSC)/(PB_DIV * PRESCALE) /**************************************************************
[單片機(jī)]
PIC32MX單片機(jī)<font color='red'>外設(shè)</font><font color='red'>庫(kù)</font>使用(Ⅲ)-- 定時(shí)器之輸入捕捉功能
STM32 SPI 發(fā)送第一個(gè)數(shù)據(jù)不成功問(wèn)題
STM32的標(biāo)準(zhǔn)庫(kù),跟HAL庫(kù)都是很實(shí)用的, 在使用SPI庫(kù)的過(guò)程中一定要注意時(shí)序的問(wèn)題。 我在調(diào)試SPI過(guò)程中,調(diào)試了兩個(gè)IC,都是用HAL庫(kù), 第一個(gè)IC沒(méi)出問(wèn)題,第二個(gè)IC出現(xiàn)了第一次發(fā)送數(shù)據(jù)不成功問(wèn)題, 不管發(fā)什么數(shù)據(jù),交互結(jié)果都是0x00, 我一開(kāi)始用的是HAL_SPI_TransmitReceive(); 這個(gè)函數(shù),一直無(wú)法成功,改用標(biāo)準(zhǔn)庫(kù)結(jié)果也是一樣; 后來(lái)查到可能是收發(fā)太快的原因, 這里說(shuō)的收發(fā)太快并不是說(shuō)兩個(gè)數(shù)據(jù)之間,而是一個(gè)交互的時(shí)候收發(fā)太快; 于是我把它改為發(fā)送接收之間加個(gè)延時(shí)問(wèn)題解決:   HAL_SPI_Transmit(&hspi1,&temp,sizeof(temp),10);   HAL_Delay
[單片機(jī)]
混子陪你學(xué)習(xí)STM32之基本定時(shí)器使用
基礎(chǔ)知識(shí) 定時(shí)器分類(lèi) typedef struct { uint32_t Prescaler; // 預(yù)分頻器 uint32_t CounterMode; // 計(jì)數(shù)模式 uint32_t Period; // 定時(shí)器周期 uint32_t ClockDivision; // 時(shí)鐘分頻 uint32_t RepetitionCounter; // 重復(fù)計(jì)算器 } TIM_TimeBaseInitTypeDef; Prescaler:定時(shí)器預(yù)分頻器設(shè)置,時(shí)鐘源經(jīng)該預(yù)分頻器才是定時(shí)器時(shí)鐘,它設(shè)定 TIMx_PSC寄存器的值。可設(shè)置范圍為0至65535,實(shí)現(xiàn)1至65536分頻。
[單片機(jī)]
STM32 虛擬U盤(pán)
使用 SRAM 進(jìn)行簡(jiǎn)單測(cè)試 Cubemx 設(shè)置 USB_OTG_FS 為 Device_Only, USB_DEVICE 設(shè)置 Class For FS IP 為 Mass Storage Class, 里面詳細(xì)配置使用默認(rèn)參數(shù)即可. 到 Project Manager 設(shè)置棧大小稍微大些, 因?yàn)?USB 協(xié)議的函數(shù)調(diào)用和局部變量較多, 比如設(shè)置成 0x10000. 在 usbd_storage_if.c 中添加如下代碼, 使用 SRAM 作為存儲(chǔ): #define STORAGE_LUN_NBR 1 #define STORAGE_BLK_NBR 200 /* 內(nèi)存容量一般來(lái)
[單片機(jī)]
stm32配合x(chóng)shell串口輸入
前言 通過(guò)xshell對(duì)stm32f103c8t6芯片進(jìn)行串口調(diào)試。 最近發(fā)現(xiàn)xshell也可以進(jìn)行串口調(diào)試,但是在數(shù)據(jù)的輸入上會(huì)有一些問(wèn)題。 因?yàn)檎5拇谡{(diào)試助手都是統(tǒng)一輸入,直接發(fā)送,但是xshell不同,正常情況下是字符逐一輸入的。 所以在進(jìn)行串口調(diào)試時(shí),需要逐個(gè)字符分析計(jì)算,最后統(tǒng)一處理。 用xshell調(diào)試的優(yōu)點(diǎn)就是軟件優(yōu)化好,使用起來(lái)很舒服。 缺點(diǎn)是,沒(méi)法看16進(jìn)制數(shù)據(jù);不能自定義數(shù)據(jù)幀格式;也沒(méi)有輸入框,也顯示不了用戶(hù)輸入數(shù)據(jù)。 整體來(lái)說(shuō),xshell用于這種串口調(diào)試,其實(shí)不是很明智的選擇。 設(shè)計(jì) 思路 graph LR A(初始化) B(主函數(shù)處理) C(回調(diào)函數(shù)處理) A -- C C -- B C -- C
[單片機(jī)]
STM32結(jié)合ESP8266初始準(zhǔn)備
使用STM32C8T6最小系統(tǒng)板+ESP8266兩者通過(guò)串口連接。使用單片機(jī)的UART1串口。 PA9 - USART1(Tx) PA10 - USART1(Rx) 注意:ESP8266必須使用5V供電 為了使得STM32接收ESP8266的數(shù)據(jù)能看到,將接收到的數(shù)據(jù)通過(guò)UART2串口發(fā)送打印在電腦上。 PA2---USART2_TX PA3---USART2_RX 初始化UART1、UART2 UART1接收函數(shù) 通過(guò)檢測(cè)關(guān)鍵字:比如 OK / / WIFI CONNECTED 來(lái)知道當(dāng)前ESP是否正常工作;若有異常,則執(zhí)行異常處理函數(shù)(沒(méi)有寫(xiě)) 關(guān)鍵字檢測(cè)函數(shù) 將AT指令使用宏定義這樣方便操
[單片機(jī)]
如何在 VScode 創(chuàng)建 stm32 項(xiàng)目?
一、參考來(lái)源 VSCode開(kāi)發(fā)STM32快速搭建開(kāi)發(fā)環(huán)境零基礎(chǔ)教程!嗶哩嗶哩bilibili 上面的鏈接是主要參考的來(lái)源。 二、工具鏈 本次使用的工作有 arm-none-eabi-gcc 來(lái)作為編譯器; pyocd 作為燒寫(xiě)器; vscode 作為編輯器; vscode 的插件 cortex-debug 作為調(diào)試工具; STM32cubeMX 作為模板的生成; make 作為構(gòu)建工具。 三、VScode 的相關(guān)插件 CC++ 插件:作為 C 語(yǔ)言的主要插件。 360截圖17700510535946.png Cortex-debug 插件:作為調(diào)試的插件。 360截圖177005105359406.png
[單片機(jī)]
STM32調(diào)試(一)】串口發(fā)送像素,上位機(jī)解析顯示
一、思路 STM32采集OV數(shù)據(jù),數(shù)據(jù)尺寸是QVGA(320*240),RGB565數(shù)據(jù)格式。采集的FIFO數(shù)據(jù)是一個(gè)像素,占兩個(gè)字節(jié)。每采集一個(gè)像素就向串口發(fā)送一個(gè)像素。上位機(jī)是一個(gè)串口助手,接收串口數(shù)據(jù),將一個(gè)RGB565格式像素解析為RGB55格式并顯示在上位機(jī)。 二、STM32采集數(shù)據(jù)發(fā)送 2.1、OV7725模組 我們使用正點(diǎn)原子的例程進(jìn)行修改,在接線(xiàn)時(shí)注意將數(shù)據(jù)線(xiàn)綁在一起,其它線(xiàn)綁在一起,以防發(fā)生數(shù)據(jù)干擾。 我們使用正點(diǎn)原子的例程進(jìn)行修改,在接線(xiàn)時(shí)注意將數(shù)據(jù)線(xiàn)綁在一起,其它線(xiàn)綁在一起,以防發(fā)生數(shù)據(jù)干擾。 我買(mǎi)的OV7725攝像頭是帶FIFO的,因?yàn)?OV7725 的像素時(shí)鐘(PCLK)最高可達(dá) 24Mhz,我們用S
[單片機(jī)]
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車(chē)開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 蒙城县| 千阳县| 曲松县| 呼图壁县| 沂源县| 滨海县| 曲水县| 绩溪县| 博罗县| 永嘉县| 贡觉县| 搜索| 荣成市| 太原市| 乐陵市| 富宁县| 中西区| 宣武区| 芷江| 太和县| 东莞市| 古浪县| 大连市| 徐州市| 新安县| 宾川县| 象山县| 呼伦贝尔市| 晋宁县| 囊谦县| 卓尼县| 西青区| 广平县| 木里| 乌鲁木齐市| 武清区| 鄂温| 钟祥市| 桑植县| 长武县| 聊城市|