2100年5月18日 星期二

文章分類






歡迎來到小弟的blog, 目前我們是一個簡單的團隊,可以接case。



平常也會做一點模組或是電子產品, 如果有任何問題,歡迎提問。



有問題也可以發信到sn903209ss@gmail.com



-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*



平常大多數時間會在關渡,如需要當面找我討論,可以約在



1、關渡,麥當勞(中央北路店):台北市北投區中央北路四段534號



2、竹圍,星巴客(新北市竹圍店):新北市淡水區民權路42號



-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*









              








2017年12月16日 星期六

[STM32] SPI slave mode

之前比較常用的是SPI master的功能,到是第一次使用SPI slave的功能,測試的時後,就把SPI1 當作Master,SPI2當作Slave,cube的設定如下





假設要使用interrupt mode的話,在initialize的時後

hspi2.RxISR = SPI2_RXISR;
hspi2.TxISR = SPI2_TXISR;
hspi2.RxXferSize  = 1;
hspi2.RxXferCount = 1;
__HAL_SPI_ENABLE_IT(&hspi2, (  SPI_IT_TXE | SPI_IT_RXNE | SPI_IT_ERR));
__HAL_SPI_ENABLE(&hspi2);

最後加入interrupt handler 即可
uint8_t abc;
void SPI1_RXISR(struct __SPI_HandleTypeDef *hspi){
abc = *(__IO uint8_t *)&hspi->Instance->DR;
}


void SPI1_TXISR(struct __SPI_HandleTypeDef *hspi){
*(__IO uint8_t *)&hspi->Instance->DR = 0x12;
}

假設要使用DMA的話,和master的用法一樣:

#define COMM_RX_MESSAGE_SIZE  4
uint8_t spiStatus, bufferRx[COMM_RX_MESSAGE_SIZE], bufferTx[COMM_RX_MESSAGE_SIZE];

同master的用法:
HAL_SPI_TransmitReceive_DMA(&hspi2, bufferTx, bufferRx, COMM_RX_MESSAGE_SIZE);              

// spi complete callback function
void HAL_SPI_TxRxCpltCallback(SPI_HandleTypeDef *hspi)
{
if (hspi->Instance==SPI2) {
// spi done
}
}

如果要做ping-pong buffer,可以call下面的function
HAL_SPI_TxRxHalfCpltCallback (SPI_HandleTypeDef *hspi)

確認DMA剩餘DATA, return length, 如果DMA是塞4 bytes,  收到4代表沒有資料, 0 代表master撈走了4個bytes。
length = __HAL_DMA_GET_COUNTER(&hdma_spi2_rx);

2017年9月30日 星期六

PIC12F1822 研究

這是一個有趣的案子,我也是第一次遇過這麼小顆的MCU,算是滿特別的際遇。

首先這顆就是顆8PIN的包裝,可以看出為了讓GPIO可以有最大的輸出,連MCLR(RESET)和ICE(ICSPDAT/ICSPCLK)都可以拿來當GPIO使用了!

另外就是這顆MCU滿特別的,有3組TIMER,但3 組TIMER的架構設計都不太一樣,主要是有些除了當TIMER之外,是可以當作PWM輸出使用,但這在F/W 設計確實也是一種複雜的設計,因為無法直接複製,需要量身定製。



這顆也有4 組ADC的功能,前3組都有照著GPIO對搭配(PA0-->AN0,PA1-->AN1,PA2-->AN2)唯獨PA4-->AN3

最後因這顆GPIO有限,又沒有充足的經驗,所以吃了不少苦頭,不過還好最後有順利結案!


2017年7月8日 星期六

[STM32] 如何量測MCU的耗電流(power consumption)?


之前在量測power consumption都是以target board 在做量測,因為這樣就不需要再重複量測一次了,不過像是stm32 的discovery或是nucleo,在板子上都有設計IDD,供量測power consumption使用。
我們來看一下說明,意思就是JP6就是一個可以斷IDD的Jumper,只要從這裡下手就好
我們看一下電路圖,就知道他設計的原理了,JP6就只是一個斷路Jumper
量測的時後只要把jumper 拔掉,裝上一顆電阻即可
這次使用10Ω的電阻

量到的電壓為0.118,由歐姆定律可以算得I=V/R, 所以得知電流為11.8mA。
當然,如果覺得這還是太複雜,可以用USB meter來做量測,只是會比較不準而已。
按住reset,或是用ice 在reset的時候先觀察一下電流,這個電流就是板子基本耗電流。
按了run之後,這個就是最大耗電流,70mA-60mA=10mA,不過因為我這台USB meter的精度只有小數2位,所以電流大概會落在10~20mA,都是有可能的。

STM32的開發板要做電流的量測,相對來說簡單許多。











2017年6月11日 星期日

STM32 CubeMX 4.21.0 改版

這陣子其實STM32 CubeMX 有改版4.21.0
這次的改版比較有感的就是直接把MCU比較重要的SPEC列出來,還有最重要的價錢都列出來了,不過單位是10K pieces,也就是1萬pieces,不過這對接案來說,是一個非常重要的參考指標

以前如果要知道MCU比較重要的information都要上STM32 的網頁product tree查

這次的改板還有把error handler做修正:
以前的版本就直接while(1)卡死在裡面,這次多了file 和 line的參數,之後就可以寫個debug log 直接吐出file和line方便debug。


雖然這次的改版讓開啟的速度又變慢了,但新增的功能有改善也算是一大福音,如果還有功能有改變的話,也可以和我說^^"