国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32 HAL FreeRTOS 硬件I2C 使用

這篇具有很好參考價(jià)值的文章主要介紹了STM32 HAL FreeRTOS 硬件I2C 使用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1.情況介紹:


因?yàn)槟硞€(gè)項(xiàng)目想要顏色識(shí)別,去識(shí)別球的顏色,但是又不想多來(lái)個(gè)攝像頭,所以想嘗試一下顏色傳感器的方案。但是經(jīng)過(guò)嘗試,HAL庫(kù)生成的 FreeRTOS 硬件 I2C 讀寫(xiě)一直在報(bào)錯(cuò)。 剛好手頭上有九軸陀螺儀的例程代碼。最后用FreeRTOS 硬件 I2C 讀取數(shù)據(jù)。

2.過(guò)程

這里提到了阻塞式 HAL 函數(shù)(?HAL_I2C_Master_Transmit(帶超時(shí))對(duì) RTOS 不友好,因?yàn)樗鼈儾粫?huì)“告訴”RTOS 它們正忙于等待(MCU 使用)某個(gè)條件。如果您需要更高的效率,您可以使用非阻塞 IT或_DMA?函數(shù),實(shí)現(xiàn)中斷和完成回調(diào)。

參考:Solved: I2C implementation based on freeRTOS OS - STMicroelectronics Community

????????? ? 任務(wù)切換導(dǎo)致I2C出錯(cuò) - STM32H7 - 硬漢嵌入式論壇 - Powered by Discuz! (armbbs.cn)

確實(shí)在我使用阻塞式(HAL_I2C_Master_Transmit)時(shí),在第一次跑 I2C 任務(wù)時(shí),它的接收是非常正常的,能夠在正常接收20次左右,就來(lái) HAL_I2C_ERROR_AF 報(bào)錯(cuò)了,然后一直死鎖發(fā)不出去。我一開(kāi)始還想偷懶,因?yàn)樽枞胶瘮?shù)的時(shí)候,數(shù)據(jù)正常接收,看看能不能對(duì)函數(shù)進(jìn)行稍微的修改,讓其跳過(guò)AF報(bào)錯(cuò)。但是讀了上面的文章之后突然就想嘗試 IT 和 DMA 。但是我手上有一份開(kāi)發(fā)板的例程是使用阻塞式來(lái)讀寫(xiě)的,我確認(rèn)了一下,FreeRTOS確實(shí)是可以通過(guò)阻塞式來(lái)讀寫(xiě)的。于是想著先繼續(xù)研究阻塞式了。

這邊例程中用的是:HAL_I2C_Mem_Read 我看了底層,跟?HAL_I2C_Master_Receive 是一樣的

那我就開(kāi)始大膽嘗試,小心求證了。我之前是生成了一份沒(méi)有 FreeRTOS? 使用硬件 I2C 讀取數(shù)據(jù)的。首先把代碼先備份一份。然后將沒(méi)有 FreeRTOS 的代碼用 cubeMX 配置為使用 FreeRTOS 。僅創(chuàng)建了三個(gè)任務(wù),一個(gè)是默認(rèn) defaultTask 任務(wù),一個(gè)是 I2C_Test 任務(wù),一個(gè)是 IDLE 任務(wù)(模擬其他需要運(yùn)行的任務(wù))。

STM32 HAL FreeRTOS 硬件I2C 使用,stm32,單片機(jī)

amazing??!I2C沒(méi)有報(bào)錯(cuò)了。ErrorCode沒(méi)了。就是數(shù)據(jù)不更新,庫(kù)函數(shù)也沒(méi)有報(bào)錯(cuò)。

STM32 HAL FreeRTOS 硬件I2C 使用,stm32,單片機(jī)

然后我看了一圈下來(lái)都沒(méi)問(wèn)題,還記得上一篇提到的博客,作者的他的 FreeRTOS 說(shuō)是添加了延時(shí),原文是這樣的:發(fā)現(xiàn)是由于循環(huán)執(zhí)行太快,數(shù)據(jù)堵塞導(dǎo)致的問(wèn)題。于是我就修改了一下任務(wù)延時(shí),果然數(shù)據(jù)就出來(lái)了。然后我把統(tǒng)計(jì)了一下任務(wù)的FPS,測(cè)試出了臨界幀率(個(gè)人視情況不同

參考:解決STM32 I2C接口死鎖在BUSY狀態(tài)的另一種原因和方法_i2c時(shí)鐘使能后busy

STM32 HAL FreeRTOS 硬件I2C 使用,stm32,單片機(jī)

自己測(cè)出來(lái)的 FPS 不能超過(guò)62,否則會(huì)造成數(shù)據(jù)堵塞。后來(lái)我滿(mǎn)心歡喜把這個(gè)移到正在使用代碼里面,數(shù)據(jù)又沒(méi)了, I2C 還報(bào)錯(cuò),ErrorCode 變回了?HAL_I2C_ERROR_AF。然后我就知道我原來(lái)里面的代碼有東西在底層影響了 I2C 。后來(lái)排查到是這個(gè)沖突了。

 __HAL_TIM_SetCompare(&htim10, TIM_CHANNEL_1, pwm);

一個(gè)是 PWM,一個(gè)是 I2C,真的是沒(méi)理由啊。隨后我看了這兩的引腳。是不是這兩在同一組GPIO就相互影響了?反正我這是暫時(shí)排除不了。大佬救救我!

STM32 HAL FreeRTOS 硬件I2C 使用,stm32,單片機(jī)

這是我把?__HAL_TIM_SetCompare 注釋掉之后的效果,沒(méi)有問(wèn)題。

STM32 HAL FreeRTOS 硬件I2C 使用,stm32,單片機(jī)

3.結(jié)語(yǔ)

阻塞式已經(jīng)能夠正常接收發(fā)送了,那我的任務(wù)就已經(jīng)結(jié)束,IT 和 DMA 我就沒(méi)去嘗試了。希望以上內(nèi)容對(duì)你有幫助,有什么不對(duì)的地方還請(qǐng)多多指點(diǎn)。

還有?PWM 和?I2C 的問(wèn)題,希望大佬救我!

參考:

STM32 I2C 從設(shè)備 DMA方式讀寫(xiě)穩(wěn)定工作,記錄以下方法。_stm32 i2c dma-CSDN博客

STM32F103學(xué)習(xí)筆記(1)——FreeRTOS下模擬I2C_freertos i2c-CSDN博客

STM32 I2C調(diào)試過(guò)程心得記錄_i2c_initstruct.i2c_analogfilter-CSDN博客

微控制器 - 在 STM32 上使用 FreeRTOS 創(chuàng)建從屬 I2C 的正確方法是什么?- 堆棧溢出 (stackoverflo??????w.com)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-830130.html

到了這里,關(guān)于STM32 HAL FreeRTOS 硬件I2C 使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 關(guān)于STM32硬件I2C HAL_I2C_Mem_Read,在I2C_WaitOnTXISFlagUntilTimeout返回HAL_ERROR

    關(guān)于STM32硬件I2C HAL_I2C_Mem_Read,在I2C_WaitOnTXISFlagUntilTimeout返回HAL_ERROR

    在使用NUCLEO-L452RE開(kāi)發(fā)版的IIC總線(xiàn)作為主機(jī)和其他設(shè)備從機(jī)通信時(shí)主機(jī)IIC在以下代碼處返回HAL_ERROR. /* Wait until TXIS flag is set */ ? if (I2C_WaitOnTXISFlagUntilTimeout(hi2c, Timeout, Tickstart) != HAL_OK) ? { ? ? return HAL_ERROR; ? } 在調(diào)試中發(fā)現(xiàn)如果使用模擬IIC,可以與從機(jī)正常通信,但是使用硬件

    2024年04月28日
    瀏覽(23)
  • STM32 SHT40驅(qū)動(dòng)源碼(使用硬件I2C)

    STM32 SHT40驅(qū)動(dòng)源碼(使用硬件I2C)

    目錄 簡(jiǎn)介: SHT40.c: SHT40.h 測(cè)試結(jié)果: ? ? ? ? SHT40是瑞士Sensirion公司推出的第四代溫濕度傳感器,內(nèi)部集成加熱器用于去除表面微小液滴。集成I2C接口,典型的相對(duì)濕度精度1.8%RH,典型溫度精度0.2℃,運(yùn)行在0-100%RH和-40-125℃的環(huán)境中。 主控:STM32H7B0VBT6 平臺(tái):STM32CubeIDE SHT4

    2024年03月19日
    瀏覽(131)
  • STM32硬件I2C通信外設(shè)

    STM32硬件I2C通信外設(shè)

    本文主要介紹stm32自帶的I2C通信外設(shè),對(duì)比與軟件模擬I2C,硬件I2C可以自動(dòng)生成時(shí)序,時(shí)序的操作更加及時(shí)規(guī)范,可以實(shí)現(xiàn)更加高性能的IIC通信。 本文內(nèi)容與I2C軟件通信有諸多類(lèi)似之處,I2C軟件通信可見(jiàn):https://blog.csdn.net/qq_53922901/article/details/136662006?spm=1001.2014.3001.5501 在8位指

    2024年04月08日
    瀏覽(27)
  • STM32 HAL庫(kù) STM32CubeMX -- I2C(IIC)

    STM32 HAL庫(kù) STM32CubeMX -- I2C(IIC)

    I2C 通訊協(xié)議(Inter - Integrated Circuit) 也就是IIC; 由Phiilps 公司開(kāi)發(fā)的,它引腳少,硬件實(shí)現(xiàn)簡(jiǎn)單,可擴(kuò)展性強(qiáng),不需要USART、CAN 等通訊協(xié)議的外部收發(fā)設(shè)備。 I2C協(xié)議分為物理層和協(xié)議層。 物理層規(guī)定通訊系統(tǒng)中具有機(jī)械、電子功能部分的特性,確保原始數(shù)據(jù)在物理媒體的傳輸

    2023年04月16日
    瀏覽(19)
  • STM32 HAL庫(kù)函數(shù)學(xué)習(xí) I2C篇

    本篇內(nèi)容講述STM32的硬件IIC功能。硬件IIC的使用在F1系列上可能會(huì)有問(wèn)題。本次使用的測(cè)試平臺(tái)是H7,用于A(yíng)T24C02芯片的讀寫(xiě)正常,暫不清楚在其他芯片上使用是否正常。 1、HAL_StatusTypeDef HAL_I2C_Init (I2C_HandleTypeDef * hi2c) I2C初始化函數(shù),使用CubeMx生成。需要選中I2C硬件指定的IO口。

    2023年04月08日
    瀏覽(23)
  • 【STM32】入門(mén)(七):I2C硬件控制方式

    【STM32】入門(mén)(七):I2C硬件控制方式

    之所以叫“I2C硬件控制方式”是與“軟件控制方式”相對(duì)。I2C軟件控制,就是寫(xiě)程序直接操作兩個(gè)GPIO引腳,分別作為時(shí)鐘線(xiàn)SCL和數(shù)據(jù)線(xiàn)SDA,按照I2C協(xié)議的時(shí)序要求,操作GPIO輸入、輸出、高電平、低電平。 聽(tīng)著就很復(fù)雜,好在STM32中有I2C的硬件實(shí)現(xiàn),即通過(guò)簡(jiǎn)單的操作寄存器

    2023年04月08日
    瀏覽(26)
  • 4針0.96寸OLED的HAL庫(kù)代碼(硬件I2C/全代碼/stm32f1/CubeMX配置/包含有正負(fù)浮點(diǎn)數(shù)/100%一次點(diǎn)亮)

    4針0.96寸OLED的HAL庫(kù)代碼(硬件I2C/全代碼/stm32f1/CubeMX配置/包含有正負(fù)浮點(diǎn)數(shù)/100%一次點(diǎn)亮)

    一、HC-SR04超聲波模塊的使用 二、4針OLED的HAL庫(kù)代碼介紹及使用(本篇) 三、7針OLED的HAL庫(kù)代碼介紹及使用 四、編碼電機(jī)以及雙電機(jī)驅(qū)動(dòng) 更多有意思的文章點(diǎn)擊“我的主頁(yè)” --------?? 更多有意思的視頻 ----- B站 @想要億只獨(dú)角獸 --------?? 之前在做一些小項(xiàng)目時(shí)用到了OLED,到

    2024年02月10日
    瀏覽(30)
  • 【STM32】STM32學(xué)習(xí)筆記-硬件I2C讀寫(xiě)MPU6050(35)

    【STM32】STM32學(xué)習(xí)筆記-硬件I2C讀寫(xiě)MPU6050(35)

    I2C(Inter-Integrated Circuit)總線(xiàn)是一種由NXP(原PHILIPS)公司開(kāi)發(fā)的兩線(xiàn)式串行總線(xiàn),用于連接微控制器及其外圍設(shè)備。多用于主控制器和從器件間的主從通信,在小數(shù)據(jù)量場(chǎng)合使用,傳輸距離短,任意時(shí)刻只能有一個(gè)主機(jī)等特性。 串行的 8 位雙向數(shù)據(jù)傳輸位速率在標(biāo)準(zhǔn)模式下可

    2024年01月25日
    瀏覽(33)
  • STM32之I2C總線(xiàn)知識(shí)和HAL庫(kù)函數(shù)

    STM32之I2C總線(xiàn)知識(shí)和HAL庫(kù)函數(shù)

    一、 I2C總線(xiàn)知識(shí) I2C總線(xiàn)物理拓?fù)浣Y(jié)構(gòu) I2C 總線(xiàn)在物理連接上非常簡(jiǎn)單,分別由SDA(串行數(shù)據(jù)線(xiàn))和SCL(串行時(shí)鐘線(xiàn))及上拉電阻組成。通信原理是通過(guò)對(duì)SCL和SDA線(xiàn)高低電平時(shí)序的控制,來(lái) 產(chǎn)生I2C總線(xiàn)協(xié)議所需要的信號(hào)進(jìn)行數(shù)據(jù)的傳遞。在總線(xiàn)空閑狀態(tài)時(shí),這兩根線(xiàn)一般被上面所接

    2024年02月21日
    瀏覽(26)
  • STM32基于CubeMX與HAL庫(kù)的I2C應(yīng)用

    STM32基于CubeMX與HAL庫(kù)的I2C應(yīng)用

    1.1 物理層 ????????I2C協(xié)議和摩托羅拉公司的SPI協(xié)議一樣,是一種通訊協(xié)議。串行外圍設(shè)備接口,是一種高速全雙工的通信總線(xiàn),是由 Phiilps 公司開(kāi)發(fā)的。由于它引腳少,硬件實(shí)現(xiàn)簡(jiǎn)單,可擴(kuò)展性強(qiáng),不需要 USART、CAN 等通訊協(xié)議的外部收發(fā)設(shè)備,現(xiàn)在被廣泛地使用在系統(tǒng)內(nèi)

    2024年02月21日
    瀏覽(33)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包