STM32H5¤ò»È¤Ã¤Æ¤ß¤ë5 -ÉáÄ̤ÎSPI¤òDMA¤È¸ò¤¨¤Æ»È¤¦-
20240516ÄÉ:
½©·î¤µ¤ó¤è¤êNUCLEO-H563ZIÈÎÇ䳫»Ï¤Ç¤¹¡ª¡ª
20240516ÄÉ:
½é¤á¤ÆSTM32H5¤ò¿¨¤Ã¤¿»þ¤â½Ò¤Ù¤Þ¤·¤¿¤¬¡¢L5¤ÈÈæ¤Ù¤ÆSPI¤äDMA¤Î°·¤¤¤¬
¤Á¤ç¤Ã¤ÈÊʤ¬¤¢¤Ã¤Æ°ã¤¤¤Þ¤¹¡£º£²ó¤Ï¤½¤Î»È¤¤Êý¤Î°ìÎã¤ò¾Ò²ð¤·¤Þ¤¹¡£
¤Ê¤ª¡¢¤Í¤à¤¤¤µ¤ó¤ÎSTM32H5¤Î¥×¥í¥¸¥§¥¯¥È¤Ç¤ÏSPI¤ò¥·¥ê¥¢¥ëÀܳ¤Î
TFT-LCD(ST7789V2¥³¥ó¥È¥í¡¼¥éIC)¤Ç»ÈÍѤ·¤Æ¤ª¤ê¤Þ¤¹¡£
¡ü¥³¡¼¥É²òÀâ(´ðËÜÀßÄêÊÔ)
°Ê²¼¤Ï¤Í¤à¤¤¤µ¤ó¤ÎSTM32H563ZI-NUCLEO¸þ¤±¤Î¥×¥í¥¸¥§¥¯¥ÈÃæ¤Î
./lib/display/mcu_depend/src/display_if_basis.c¤ò²òÀ⤷¤Æ¤¤¤¤Þ¤¹¡£
./lib/display/mcu_depend/inc/display_if_basis.h¤â»²¾È¤Î¤³¤È¡£
Display_IoInit_If()Æâ¤Ç¥Ï¡¼¥É¥¦¥¨¥¢SPI¤«¤éDMA¤ÎÀßÄê¤Þ¤Ç¤ä¤Ã¤Á¤ã¤Ã¤Æ
¤Þ¤¹¤¬¾¯¤·¤º¤Äʬ²ò¤·¤Æ¤¤¤¤Þ¤¹¡£
¤Þ¤º¤ÏI/O¤ÎÀßÄê¤Ç¤¹¡£
GPIO_InitTypeDef GPIO_InitStructure = {0};
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
/* Enable CTRL line GPIO settings */
DISPLAY_GPIOCLK_EN(DISPLAY_CLK_RES);
DISPLAY_GPIOCLK_EN(DISPLAY_CLK_CS);
DISPLAY_GPIOCLK_EN(DISPLAY_CLK_DC);
DISPLAY_GPIOCLK_EN(DISPLAY_CLK_SCK);
DISPLAY_GPIOCLK_EN(DISPLAY_CLK_SDI);
DISPLAY_GPIOCLK_EN(DISPLAY_CLK_SDO);
GPIO_InitStructure.Pin = CTRL_RES;
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStructure.Pull = GPIO_NOPULL;
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStructure.Alternate = 0;
HAL_GPIO_Init(DISPLAY_PORT_RES, &GPIO_InitStructure);
GPIO_InitStructure.Pin = CTRL_CS;
HAL_GPIO_Init(DISPLAY_PORT_CS, &GPIO_InitStructure);
GPIO_InitStructure.Pin = CTRL_DC;
HAL_GPIO_Init(DISPLAY_PORT_DC, &GPIO_InitStructure);
/* Set peripheral clock */
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_SPI1;
PeriphClkInitStruct.Spi1ClockSelection = RCC_SPI1CLKSOURCE_PLL1Q;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
{
for(;;){
__NOP();
}
}
DISPLAY_PERIF_CLK(ENABLE);
/* Connect SPI pins to aletenate function */
GPIO_InitStructure.Mode = GPIO_MODE_AF_PP;
GPIO_InitStructure.Pull = GPIO_NOPULL;
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
/* SPI SCK pin configuration */
GPIO_InitStructure.Pin = CTRL_SCK;
GPIO_InitStructure.Alternate = SRC_SCK;
HAL_GPIO_Init(DISPLAY_PORT_SCK, &GPIO_InitStructure);
/* SPI MOSI pin configuration */
GPIO_InitStructure.Pin = CTRL_SDI;
GPIO_InitStructure.Alternate = SRC_SDI;
HAL_GPIO_Init(DISPLAY_PORT_SDI, &GPIO_InitStructure);
/* SPI MISO pin configuration */
GPIO_InitStructure.Pin = CTRL_SDO;
GPIO_InitStructure.Alternate = SRC_SDO;
HAL_GPIO_Init(DISPLAY_PORT_SDO, &GPIO_InitStructure);
SCK,MOSI,MISO¤ÏAlternateFunction¤È¤·¤Æ¡¢RESET¡¦CS¡¦DC¤ÏGPIO¤È¤·¤Æ
ÀßÄꤷ¤Þ¤¹¡£
¤ª¼¡¤ÏSPI¥â¥¸¥å¡¼¥ë¤ÎÀßÄê¤Ç¤¹¡£
/* SPI configuration */
SpiHandle.Instance = LCD_SPI;
SpiHandle.Init.Mode = SPI_MODE_MASTER;
SpiHandle.Init.Direction = SPI_DIRECTION_2LINES;
SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT;
SpiHandle.Init.CLKPolarity = SPI_POLARITY_HIGH;
SpiHandle.Init.CLKPhase = SPI_PHASE_2EDGE;
SpiHandle.Init.NSS = SPI_NSS_SOFT;
SpiHandle.Init.BaudRatePrescaler = SPI_BaudPrescale;
SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB;
SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE;
SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
SpiHandle.Init.CRCPolynomial = 0x7;
SpiHandle.Init.CRCLength = SPI_CRC_LENGTH_8BIT;
SpiHandle.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
SpiHandle.Init.NSSPolarity = SPI_NSS_POLARITY_LOW;
SpiHandle.Init.FifoThreshold = SPI_FIFO_THRESHOLD_01DATA;
SpiHandle.Init.MasterSSIdleness = SPI_MASTER_SS_IDLENESS_00CYCLE;
SpiHandle.Init.MasterInterDataIdleness = SPI_MASTER_INTERDATA_IDLENESS_00CYCLE;
SpiHandle.Init.MasterReceiverAutoSusp = SPI_MASTER_RX_AUTOSUSP_DISABLE;
SpiHandle.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE; /* avoid glitch */
SpiHandle.Init.IOSwap = SPI_IO_SWAP_DISABLE;
SpiHandle.Init.ReadyMasterManagement = SPI_RDY_MASTER_MANAGEMENT_INTERNALLY;
SpiHandle.Init.ReadyPolarity = SPI_RDY_POLARITY_HIGH;
if(HAL_SPI_Init(&SpiHandle) != HAL_OK)
{
/* Capture error */
while (1);
}
/* Enable SPI module */
LCD_SPI->CR1 |= SPI_CR1_SPE;
LCD_SPI->CR1 |= SPI_CR1_CSTART;
HAL_SPI_Init()¤¬´°Î»¤·¤¿¤éCR1¥ì¥¸¥¹¥¿¤ÎSPE¤ÈCSTART¥Ó¥Ã¥È¤ò1¤Ë¤·¤Æ
SPI¥â¥¸¥å¡¼¥ë¤ò¥¹¥¿¡¼¥È¾õÂ֤ˤµ¤»¤ë¤Î¤¬¥ß¥½¤Ç¤¹¡£
ÀßÄêÃæ¤Ç
SpiHandle.Init.BaudRatePrescaler = SPI_BaudPrescale;
¤Ç¤¹¤¬
#define SPI_BaudPrescale SPI_BAUDRATEPRESCALER_4 /* PLL1Q CLK 100MHz/4 = 25MHz */
¤Èdefine¤·¤Æ¤ª¤ê¤Þ¤¹¡£SPI¤Î¥¯¥í¥Ã¥¯¤Ï25MHz¤È¤·¤Æ¤Þ¤¹¡£
20240502ÄÉ:
ST7789V2¤ÎSCL¤Î¥¯¥í¥Ã¥¯ºÇÂçÃͤÁ¤ã¤ó¤ÈÄ´¤Ù¤¿¤é¤Ê¤ó¤È60MHz¤Ç¤·¤¿¡ª¡ª¡ª
Á´Á³Í¾Íµ¤Ç¤·¤¿¤¹¤ß¤Þ¤»¤ó¡ª¡ª¡ª¡ª¡ª
20240502ÄÉ:
¤½¤·¤ÆDMA¤ÎÀßÄê¤Ç¤¹¡Ä¤³¤ì¤¬°ìÈÖ¶ìÏ«¤·¤Þ¤·¤¿¡£
/* DMA controller clock enable */
__HAL_RCC_GPDMA1_CLK_ENABLE();
/* DMA interrupt init */
/* SPILCD_DMA_IRQn interrupt configuration */
HAL_NVIC_SetPriority(SPILCD_DMA_IRQn, 3, 0);
HAL_NVIC_EnableIRQ(SPILCD_DMA_IRQn);
/* Configure DMA request LcdDmaHandle */
LcdDmaHandle.Instance = SPILCD_DMA_CHANNEL;
LcdDmaHandle.Init.Request = SPILCD_DMA_REQEST;
LcdDmaHandle.Init.BlkHWRequest = DMA_BREQ_SINGLE_BURST;
LcdDmaHandle.Init.Direction = DMA_MEMORY_TO_PERIPH;
LcdDmaHandle.Init.SrcInc = DMA_SINC_INCREMENTED;
LcdDmaHandle.Init.DestInc = DMA_DINC_FIXED;
LcdDmaHandle.Init.SrcDataWidth = DMA_SRC_DATAWIDTH_BYTE;
LcdDmaHandle.Init.DestDataWidth = DMA_DEST_DATAWIDTH_BYTE;
LcdDmaHandle.Init.Priority = DMA_LOW_PRIORITY_HIGH_WEIGHT;
LcdDmaHandle.Init.SrcBurstLength = 1;
LcdDmaHandle.Init.DestBurstLength = 1;
LcdDmaHandle.Init.TransferAllocatedPort = DMA_SRC_ALLOCATED_PORT0|DMA_DEST_ALLOCATED_PORT0;
LcdDmaHandle.Init.TransferEventMode = DMA_TCEM_BLOCK_TRANSFER;
LcdDmaHandle.Init.Mode = DMA_NORMAL;
if (HAL_DMA_Init(&LcdDmaHandle) != HAL_OK)
{
for(;;){
__NOP();
}
}
__HAL_LINKDMA(&SpiHandle,hdmatx,LcdDmaHandle);
if (HAL_DMA_ConfigChannelAttributes(&LcdDmaHandle, DMA_CHANNEL_NPRIV) != HAL_OK)
{
for(;;){
__NOP();
}
}
/* SPI interrupt init */
/* SPILCD_IRQn interrupt configuration */
HAL_NVIC_SetPriority(SPILCD_IRQn, 3, 1);
HAL_NVIC_EnableIRQ(SPILCD_IRQn);
º£²ó¤ÏTFT-LCD¤Ë¸þ¤±¤Æ¤Ò¤¿¤¹¤é¥Ç¡¼¥¿¤ò¥Ð¥¤¥Èñ°Ì¤Ç¤Ö¤óÅꤲ¤ë¤Î¤Ç
LcdDmaHandle.Init.Direction = DMA_MEMORY_TO_PERIPH;
LcdDmaHandle.Init.SrcInc = DMA_SINC_INCREMENTED;
LcdDmaHandle.Init.DestInc = DMA_DINC_FIXED;
LcdDmaHandle.Init.SrcDataWidth = DMA_SRC_DATAWIDTH_BYTE;
LcdDmaHandle.Init.DestDataWidth = DMA_DEST_DATAWIDTH_BYTE;
¤ÎÉôʬ¤¬½ÅÍפǤ¹¡£
¤½¤·¤Æ¤Ê¤ó¤Ç¤«DMA¤Î¤Û¤«¤ËSPI¤Î³ä¤ê¹þ¤ß¤âÍ׵ᤷ¤Æ¤¯¤ë¤Î¤Ç
DMA¤ÎÀßÄê¤ÎºÇ¸å¤ËSPI¤Î³ä¤ê¹þ¤ß¤âɬ¤ºÍ¸ú¤Ë¤·¤Þ¤¹¡£
¡ü¥³¡¼¥É²òÀâ(´ðËܥǡ¼¥¿¤Î¤ä¤ê¼è¤êÊÔ)
SPIÀܳ¤ÎTFT-LCD¤Î´ðËܤÏ8bit¤Î¥Ç¡¼¥¿¤ò¤ä¤ê¼è¤ê¤·¤Þ¤¹¡£
¤Ç¡¢STM32H5¤Ç¤Ï8bit¥Ç¡¼¥¿¤Î¤ä¤ê¼è¤ê¤¹¤ë¤Î¤ËÁÇľ¤ËTDR¤Ë¥Ç¡¼¥¿¤ò
Êü¤ê¹þ¤ó¤Ç¤â¤Þ¤È¤â¤ËÁ÷½Ð¤µ¤ì¤Ê¤¤¤Î¤Ç¤Á¤ç¤Ã¤ÈºÙ¹©¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
¤Þ¤º¤Ï8bitñ°Ì¤Ç¥Ç¡¼¥¿¤ò¤ä¤ê¼è¤ê¤¹¤ë¤¿¤á¤Îdefine
#define SPIx_TDR8 *(__IO uint8_t *) ((uint32_t)LCD_SPI+0x20)
#define SPIx_RDR8 *(__IO uint8_t *) ((uint32_t)LCD_SPI+0x30)
☝¤òÍøÍѤ·¤¿Á÷¿®´Ø¿ô¤Ï¤³¤Á¤é
inline void SendSPI(uint8_t dat)
{
/* Send byte through the SPI peripheral */
SPIx_TDR8 = dat;
/* Wait to receive a byte */
while (!(LCD_SPI->SR & (SPI_FLAG_RXP)));
/* Drain Rx FIFO */
SPIx_RDR8;
}
inline void SendSPI16(uint16_t dat)
{
SendSPI((uint8_t)(dat>>8));
SendSPI((uint8_t)dat);
}
STM32CubeH5¤ÎHAL¥É¥é¥¤¥Ð¤ÎÁ÷¿®´Ø¿ô¤Ï°Û¾ï¤Ê¤Þ¤Ç¤Ë¥ª¡¼¥Ð¡¼¥Ø¥Ã¥É¤¬Â礤¤
¤Ç¤¹¤¬Ãæ¿È¤òʬ²ò¤·¤Æ´Êά²½¤¹¤ë¤ÈÁ÷¿®¤Ï¤³¤³¤Þ¤Ç¥·¥ó¥×¥ë¤Ë¤Ê¤ê¤Þ¤¹¡£
¤µ¤é¤ËST7789V2¸þ¤±¤Ë¤Ï¾åµ´Ø¿ô¤òÍøÍѤ·¤ÆCMD,DATA,GRAM½ñ¤¹þ¤ßÍѤËÙϤ¨¤Þ¤¹¡£
/**************************************************************************/
/*!
Write LCD Command.
*/
/**************************************************************************/
inline void ST7789V2_wr_cmd(uint8_t cmd)
{
ST7789V2_DC_CLR(); /* DC=L */
DISPLAY_ASSART_CS(); /* CS=L */
SendSPI(cmd);
DISPLAY_NEGATE_CS(); /* CS=H */
ST7789V2_DC_SET(); /* DC=H */
}
/**************************************************************************/
/*!
Write LCD Data and GRAM.
*/
/**************************************************************************/
inline void ST7789V2_wr_dat(uint8_t dat)
{
DISPLAY_ASSART_CS(); /* CS=L */
SendSPI(dat);
DISPLAY_NEGATE_CS(); /* CS=H */
}
/**************************************************************************/
/*!
Write LCD GRAM.
*/
/**************************************************************************/
inline void ST7789V2_wr_gram(uint16_t gram)
{
DISPLAY_ASSART_CS(); /* CS=L */
SendSPI16(gram);
DISPLAY_NEGATE_CS(); /* CS=H */
}
°ì±þRead¤â¼ÂÁõ¤·¤Æ¤ª¤ê¤Þ¤¹¤¬°ÊÁ°¤â²òÀ⤷¤Æ¤ª¤ê¤Þ¤¹¤Î¤Çº£²ó¤Ï³ä°¦¤·¤Þ¤¹¡£
¡ü¥³¡¼¥É²òÀâ(DMA¤Ç¤Ö¤óÅꤲ¤ëÊÔ)
¤³¤ì¤¬°ìÈÖÆñ¤·¤¤¤Ç¤¹¡ÄHAL¥É¥é¥¤¥Ð¤ÎºîÎã¤ÏLinkList¤ò»ÈÍѤ·¤¿Ê£»¨¤Ê
DMAžÁ÷¤·¤«¥³¡¼¥ÉÎ㤬¤Ê¤¯¤Æ¥·¥ó¥×¥ë¤ÊDMA¤Î¥³¡¼¥ÉÎ㤬¤Ê¤¯ºî¤ê¤³¤ß¤Ë
Èó¾ï¤Ë¶ìÏ«¤·¤Þ¤·¤¿¡Ä¤¬¡¢²¿¤È¤«¤Ê¤ê¤Þ¤·¤¿¡£
¤Þ¤º¤ÏHAL¥é¥¤¥Ö¥é¥ê¤ÎDMA,SPI¤ÎIRQ¥Ï¥ó¥É¥é¤òÄêµÁ¤·¤Þ¤¹¡£
/* DMA IRQ Handler */
void SPILCD_DMA_HANDLER(void)
{
HAL_DMA_IRQHandler(&LcdDmaHandle);
}
/* SPI IRQ Handler */
void SPILCD_IRQHandler(void)
{
HAL_SPI_IRQHandler(&SpiHandle);
}
¤½¤ó¤Ç¤â¤Ã¤Æº£²ó¤ÏSendÀìÍѤʤΤÇSPI¤Î³ä¤ê¹þ¤ß¤ÇTx´°Î»¤Î¥³¡¼¥ë¥Ð¥Ã¥¯
´Ø¿ô¤òÄêµÁ¤·¤Þ¤¹¡£
/* SPI-DMA IRQ Callback */
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi)
{
if(hspi->Instance == LCD_SPI){
wTransferState = TRANSFER_COMPLETE;
}
}
STM32L5¤Î¾ì¹ç¤ÏSPI¤Î³ä¤ê¹þ¤ß¤¬É¬Íפʤ«¤Ã¤¿¤Î¤Ç¤¹¤¬¡¢H5¤Ç¤Ï³ä¤ê¹þ¤ß
ɬ¿Ü¤Ë¤Ê¤Ã¤Æ¤¤¤ä¤¬¤ê¤Þ¤¹¡Ä¡ª¤Ê¤ª¡¢STM32H7¤âƱ¤¸¤¯DMAžÁ÷¤ËSPI¤Î
³ä¤ê¹þ¤ßÀßÄ꤬ɬ¿Ü¤Ç¤¹(»È¤Ã¤Æ¤Ê¤«¤Ã¤¿¤«¤éº£¤Þ¤ÇÃΤé¤ó¤«¤Ã¤¿¡Ä)¡£
¼ÂºÝ¤ÎDMAžÁ÷´Ø¿ô¤Ï¤³¤Á¤é¤Ë¤Ê¤ê¤Þ¤¹¡£
/* DMA transaction */
void lcd_dma_transfer(const uint8_t *buff,unsigned int count)
{
/* Disable SPI to change register */
LCD_SPI->CR1 &= ~(SPI_CR1_SPE);
/* Start DMA */
if (HAL_SPI_Transmit_DMA(&SpiHandle, buff, count) != HAL_OK)
{
for(;;){
__NOP();
}
}
/* Wait transfer complete */
while (wTransferState == TRANSFER_WAIT) {};
/* Restore transfer state */
wTransferState = TRANSFER_WAIT;
/* Restore nomal transfer settings */
LCD_SPI->CR2 = 0; /* Restore TSIZE */
LCD_SPI->CFG2 &= ~(SPI_CFG2_COMM_Msk); /* Restore FULL duplex mode */
LCD_SPI->CR1 |= SPI_CR1_SPE; /* Re-enable SPI module */
LCD_SPI->CR1 |= SPI_CR1_CSTART; /* Re-start SPI Trasfer ready */
}
žÁ÷¤Î¼ê½ç¤Ï
¡SPI¥â¥¸¥å¡¼¥ë¤òDisable
¢HAL_SPI_Transmit_DMA¤ò¼Â¹Ô
£SPI¤Î¥³¡¼¥ë¥Ð¥Ã¥¯´Ø¿ô¤¬Å¾Á÷´°Î»¤òÊá¤Þ¤¨¤ë¤Þ¤ÇÂÔ¤Ä
¤¼¡¤ÎžÁ÷¤Î½àÈ÷¤òÀßÄê
¤È¤Ê¤ê¤Þ¤¹¡£
Æäˤ¤Î²¼µ¥³¡¼¥É¤ËÁêÅö¤¹¤ë¸å½èÍý¤ÏĶ½ÅÍפǤ¹¡ª¡ª
/* Restore nomal transfer settings */
LCD_SPI->CR2 = 0; /* Restore TSIZE */
LCD_SPI->CFG2 &= ~(SPI_CFG2_COMM_Msk); /* Restore FULL duplex mode */
LCD_SPI->CR1 |= SPI_CR1_SPE; /* Re-enable SPI module */
LCD_SPI->CR1 |= SPI_CR1_CSTART; /* Re-start SPI Trasfer ready */
¤³¤ì¤ò¤ä¤Ã¤Æ¤ª¤«¤Ê¤¤¤ÈÄ̾ïžÁ÷¤¬¤Ç¤¤Ê¤¯¤Ê¤ë¤Î¤Çɬ¤º
¸å½èÍý¤Ï¤Ï˺¤ì¤º¤Ë¡ª¡ª¤É¤ì¤¬·ç¤±¤Æ¤âÆ°¤«¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£
¤³¤ó¤Ê¤ï¤±¤Ç¤«¤Ê¤êÊʤ¬¤¢¤ëSTM32H5¤ÎSPI¤òDMA¤È¸ò¤¨¤Æ»ÈÍѤ·¤Æ¤ß¤Þ¤·¤¿¡£
º£²ó¤Ï8bitSPIÀܳ¤ÎTFT-LCDÀܳ¤ËÆò½¤·¤¿¥³¡¼¥É¤Î¾Ò²ð¤È¤Ê¤ê¤Þ¤·¤¿¤¬¡¢
·Ò¤¬¤ëSPI¥Ç¥Ð¥¤¥¹¤ÎÆÃÀ¤è¤Ã¤ÆÀßÄê¤Ï¤«¤Ê¤êÊѤï¤ê¤Þ¤¹¤Î¤Ç¤½¤ì¤¾¤ì¤Ç
»î¹Ôºø¸í¤¬É¬ÍפȤʤë¤Ç¤·¤ç¤¦¡Ä
¡ÄÀµÄ¾OCTO-SPI¤äSDMMC¤È¤«¤è¤êÆ°¤«¤¹¤Î¤·¤ó¤É¤«¤Ã¤¿¡Ä¡£
-
ÌÈÀÕ¡¦Ï¢ÍíÀè¤Ï¢¬¤Î¥ê¥ó¥¯¤ò
¢SNS¤â¤ä¤Ã¤Æ¤Þ¤¹¢
powered by ¤Þ¤á¤ï¤¶- ARM/STM32 (116)
- OpenOCD (27)
- ARM/NxP (34)
- ARM/Cypress (5)
- ARM/Others (3)
- ARM/Raspi (1)
- AVR (13)
- FPGA (4)
- GPS/GNSS (19)
- MISC (81)
- STM8 (2)
- Wireless¤Ê¥¢¥ì (16)
- ¤ª¤¤Ñ (1)
- ¥Ö¥é¥¦¥¶¥Ù¥ó¥Á¥Þ¡¼¥¯ (28)
- ÆüËܤμ«Á³ÊâÆ» (25)
- STM32U0¤Ï¤Â¤á¤Þ¤·¤¿
¢Í ¤Í¤à¤¤ (08/07) - STM32U0¤Ï¤Â¤á¤Þ¤·¤¿
¢Í ¤Ò¤«¤ï (07/28) - STM32H5¤ò»È¤Ã¤Æ¤ß¤ë3 -ÂÔ¤Á¼õ¤±¤ë½é¸«»¦¤·¤Î櫤¿¤Á-
¢Í ¤Í¤à¤¤ (05/17) - STM32H5¤ò»È¤Ã¤Æ¤ß¤ë3 -ÂÔ¤Á¼õ¤±¤ë½é¸«»¦¤·¤Î櫤¿¤Á-
¢Í ¤É¤¸¤ç¤ê¤ó (05/16) - STM32H5¤ò»È¤Ã¤Æ¤ß¤ë3 -ÂÔ¤Á¼õ¤±¤ë½é¸«»¦¤·¤Î櫤¿¤Á-
¢Í ¤É¤¸¤ç¤ê¤ó (05/16) - ¤¤¤í¤¤¤í»î¤¹61(¤Èº£Ç¯¤ÎÈ¿¾Ê²ñ)
¢Í ¤Í¤à¤¤ (01/02) - ¤¤¤í¤¤¤í»î¤¹61(¤Èº£Ç¯¤ÎÈ¿¾Ê²ñ)
¢Í ¤Ò¤«¤ï (01/02) - ¤¤¤í¤¤¤í»î¤¹61(¤Èº£Ç¯¤ÎÈ¿¾Ê²ñ)
¢Í ¤Ò¤«¤ï (01/01) - STM32H5¤ò»È¤Ã¤Æ¤ß¤ë3 -ÂÔ¤Á¼õ¤±¤ë½é¸«»¦¤·¤Î櫤¿¤Á-
¢Í ¤Í¤à¤¤ (12/31) - STM32H5¤ò»È¤Ã¤Æ¤ß¤ë3 -ÂÔ¤Á¼õ¤±¤ë½é¸«»¦¤·¤Î櫤¿¤Á-
¢Í ¤Ò¤«¤ï (12/31)
- October 2024 (1)
- September 2024 (1)
- August 2024 (1)
- July 2024 (1)
- June 2024 (1)
- May 2024 (1)
- April 2024 (1)
- March 2024 (1)
- February 2024 (2)
- January 2024 (1)
- December 2023 (4)
- November 2023 (2)
- October 2023 (2)
- September 2023 (1)
- August 2023 (2)
- July 2023 (1)
- June 2023 (2)
- May 2023 (3)
- April 2023 (1)
- March 2023 (1)
- February 2023 (1)
- January 2023 (1)
- December 2022 (2)
- November 2022 (1)
- October 2022 (1)
- September 2022 (1)
- August 2022 (1)
- July 2022 (1)
- June 2022 (1)
- May 2022 (1)
- April 2022 (1)
- March 2022 (1)
- February 2022 (1)
- January 2022 (1)
- December 2021 (2)
- November 2021 (2)
- October 2021 (1)
- September 2021 (1)
- August 2021 (1)
- July 2021 (1)
- June 2021 (1)
- May 2021 (1)
- April 2021 (1)
- March 2021 (1)
- February 2021 (1)
- January 2021 (1)
- December 2020 (3)
- November 2020 (1)
- October 2020 (1)
- September 2020 (1)
- August 2020 (1)
- July 2020 (1)
- June 2020 (2)
- May 2020 (1)
- April 2020 (1)
- March 2020 (1)
- February 2020 (1)
- January 2020 (1)
- December 2019 (3)
- November 2019 (1)
- October 2019 (1)
- September 2019 (2)
- August 2019 (1)
- July 2019 (1)
- June 2019 (1)
- May 2019 (1)
- April 2019 (1)
- March 2019 (1)
- February 2019 (1)
- January 2019 (1)
- December 2018 (3)
- November 2018 (2)
- October 2018 (1)
- September 2018 (1)
- August 2018 (1)
- July 2018 (1)
- June 2018 (1)
- May 2018 (1)
- April 2018 (2)
- March 2018 (1)
- February 2018 (1)
- January 2018 (1)
- December 2017 (2)
- November 2017 (2)
- October 2017 (1)
- September 2017 (1)
- August 2017 (1)
- July 2017 (1)
- June 2017 (1)
- May 2017 (1)
- April 2017 (1)
- March 2017 (2)
- February 2017 (2)
- January 2017 (2)
- December 2016 (7)
- November 2016 (2)
- October 2016 (2)
- September 2016 (1)
- August 2016 (1)
- July 2016 (1)
- June 2016 (1)
- May 2016 (2)
- April 2016 (1)
- March 2016 (2)
- February 2016 (1)
- January 2016 (1)
- December 2015 (3)
- November 2015 (1)
- October 2015 (3)
- September 2015 (2)
- August 2015 (2)
- July 2015 (3)
- June 2015 (3)
- May 2015 (4)
- April 2015 (2)
- March 2015 (4)
- February 2015 (1)
- January 2015 (3)
- December 2014 (3)
- November 2014 (2)
- October 2014 (1)
- September 2014 (2)
- August 2014 (2)
- July 2014 (3)
- June 2014 (2)
- May 2014 (1)
- April 2014 (1)
- March 2014 (4)
- February 2014 (4)
- January 2014 (3)
- December 2013 (5)
- November 2013 (4)
- October 2013 (3)
- September 2013 (2)
- August 2013 (2)
- July 2013 (2)
- June 2013 (3)
- May 2013 (2)
- April 2013 (2)
- March 2013 (2)
- February 2013 (2)
- January 2013 (3)
- December 2012 (4)
- November 2012 (2)
- October 2012 (2)
- September 2012 (4)
- August 2012 (1)
- July 2012 (3)
- June 2012 (2)
- May 2012 (3)
- April 2012 (3)
- March 2012 (2)
- February 2012 (3)
- January 2012 (3)
- December 2011 (5)
- November 2011 (3)
- October 2011 (2)
- September 2011 (2)
- August 2011 (2)
- July 2011 (2)
- June 2011 (2)
- May 2011 (2)
- April 2011 (2)
- March 2011 (2)
- February 2011 (2)
- January 2011 (3)
- December 2010 (7)
- November 2010 (1)
- October 2010 (1)
- September 2010 (1)
- August 2010 (3)
- July 2010 (4)
- May 2010 (1)
- April 2010 (2)
- March 2010 (2)
- February 2010 (2)
- January 2010 (3)
- December 2009 (3)
- November 2009 (8)
- October 2009 (7)
- September 2009 (5)
- August 2009 (4)
- July 2009 (6)
- June 2009 (6)
- May 2009 (14)
- January 1970 (1)
Copyright(C) B-Blog project All rights reserved.