1.ã©ã®ãããªã¢ããªã±ãŒã·ã§ã³
ãŸããæäŸãããŠããã¢ããªãèŠãŠã¿ãŸããããhttps://all-hw.com/ã®ãµã€ãã«å ¥ããŸãã
ããã«ãã°ã€ã³ããå¿ èŠããããŸãïŒç»é²ã¯ç¡æã§ãïŒããã®åŸãå©çšå¯èœãªããŒãã®ãªã¹ãã衚瀺ãããŸãã æåã®ãã®ã¯ç»é¢ããªãã®ã§ãèšäºã®ã€ã©ã¹ããšããŠã¯äžäŸ¿ã§ãã2ã€ç®ã¯å¹³å¡ã§ã誰ãããããæã£ãŠããŸããããã«ã€ããŠè©±ãã®ã¯é¢çœããããŸããã3çªç®ã®STM32F469Iãã£ã¹ã«ããªãŒãéžæããŸãã ããã€ãã®æé ãå®è¡ããåŸã次ã®ããŒãžã衚瀺ãããŸãã å®éãå·ŠåŽã«ã¯ãã«ã¡ã©ãåãå€ããããŒãããããŸãããããŠããŸãã«ãã®ã¢ããªã±ãŒã·ã§ã³ãããã§æ©èœããŸããã«ãŠã³ã¿ãŒãã«ãã«ãé³ãããŠãã ãã§ãããŸããå³åŽã®ç«¯æ«ã«åç·ãå ¥åãããšãUARTãããã°ããŒãã«æ¥ç¶ãããŠãããããç»é¢ã«è¡šç€ºãããŸããããŠãããã§ç§ã¯ãžã£ã¹ããã¹ãã«å ¥ããŸããã
ãã®æ©èœãå®è£ ããã³ã³ãããŒã©ãŒã®ã¢ããªã±ãŒã·ã§ã³ã¯è€éã§ã¯ãªãããã§ãã...ããã...ç¹°ãè¿ããŸãããSTããŒãã®çš®é¡ã®æ°ãååŸããå°ãªããšã3ãæããŸãããŸããéåžžã«éèŠãªæ¡ä»¶ã§ãããã®ã¢ããªã±ãŒã·ã§ã³ã®éçºæéã¯é·ããŠã¯ãªããŸãããã§ããã ãæ©ãéçºããå¿ èŠããããŸãããŸããå°ãªããšã3ã€ã®ã³ã³ãã€ã©ã§ã³ã³ãã€ã«ããå¿ èŠããããŸãã
2.å¯èœãªæ¹æ³
æåã«é ã«æµ®ãã¶ã®ã¯ãSTM32CubeMXã§å žåçãªã¢ããªã±ãŒã·ã§ã³ãéçºããããšã§ããããã§ã3ã€ã®éçºç°å¢ã®ãã¹ãŠãçæããæšæºããã€ã¹ããã°ããè¿œå ã§ããŸããããã¯ããã§ãããããïŒ
- CubeMXãä»ããŠäœæãããã¢ããªã±ãŒã·ã§ã³ã®æäœäŸãèŠããšãèªåäœæåŸãããã¡ã€ã«ã䜿çšããŠå€ãã®ããšã調æŽããå¿ èŠãããããšãããããŸããã€ãŸããæéã¯ç¯çŽãããŸãããããã§ãæ倧ã§ã¯ãããŸããã
- , .
- Cube MX STemWin, ( , , , ST STemWin TouchGFX, â ).
å®éãããã¯ãã®ãããªãªãã·ã§ã³ãäºåãšããŠå»¶æããããç°¡åãªè§£æ±ºçããããã©ããã確èªããã®ã«ååã§ã...ããããšãå€æãããããã¯CubeMXã«ãé¢é£ããŠããŸãããã®ç°å¢ã§äœæ¥ããããšã®ãã人ãªã誰ã§ããç¹å®ã®ã³ã³ãããŒã©ãŒãã¡ããªãŒã«ãµãŒãã¹ãæäŸããã³ã¢ã³ãŒããšããã±ãŒãžã§æ§æãããŠããããšãç¥ã£ãŠããŸããããã±ãŒãžã¯äœã§ããïŒããã¯ZIPãã¡ã€ã«ã§ããããŠã³ããŒãããŠé梱ããŸããããããšãã°ãæ°ããSTM32H747ã®ããã±ãŒãžãèããŠã¿ãŸããããç§ã¯ãã®ãã¡ã€ã«en.stm32cubeh7_v1-8-0.zipãæã£ãŠããŸãã
ãããŠããã®ãããªè±ãããããããŸãã
ãããã¯ããã®ã¿ã€ãã®ã³ã³ãããŒã©ãŒãåããããŸããŸãªãããã¿ã€ãã³ã°ããŒãã®å žåçãªãœãªã¥ãŒã·ã§ã³ã§ããã¯ããã«ã¿ãã°STM32H747I-DISCOãå ¥åããŸã..ãåå¥ã«æ¢è£œã®ã¢ããªã±ãŒã·ã§ã³ãšåå¥ã«ãããŸã-ã³ã³ãããŒã©ãŒãããã¯ãæäœããããã®äŸãããã§ã¯ãäŸãäœæãããã ãã®äººã«ãšã£ãŠèå³æ·±ãããšã¯äœããããŸããããäžè¬çãªãã¢ã¢ããªã±ãŒã·ã§ã³ã®éçºè ã¯ãUARTãã£ã¬ã¯ããªã®å 容ã調ã¹ãå¿ èŠããããŸãã
ãããŠãã¡ãããã¢ããªã±ãŒã·ã§ã³ããã¯ãSTemWinã§ãããããŠãæãåçŽã§ããããã«ã¡ã¯äžçããããé 眮ãããŠãããã£ã¬ã¯ããªã¯ããã¹ãŠã®ãŠãŒã¶ãŒã«ãšã£ãŠéèŠã§ãã
ãã®ã¢ããªã±ãŒã·ã§ã³ã«åºã¥ããŠäŸãäœæããŸããã©ãããŠïŒSTemWin_HelloWorldãã£ã¬ã¯ããªã«å ¥ãã次ã確èªããŸãã
STããã°ã©ããŒã¯ç§ãã¡ã®ããã«ãã¹ãŠãããŠãããŸããã圌ãã¯ãKeilãIARãããã³EclipseïŒå®éã«ã¯Cube-IDEïŒããã³ã³ãã€ã«ã§ãããœãŒã¹ãäœæããŸããããããã£ãŠããããã®ãœãŒã¹ãä¿®æ£ããã ãã§ååã§ãããéçºç°å¢ã«äŸåãããã¡ã€ã«ãç·šéããªããŠãã¿ã¹ã¯ã¯è§£æ±ºãããŸããããŠãHello Worldãããžã§ã¯ãã§ã¯ãç»é¢ã«ããã¹ãã衚瀺ãããŸãã UARTãµããŒããè¿œå ããã ãã§ååã§ããããã¹ãŠãæ©èœããŸãããã®ãããUARTã®äŸã¯éçºè ã«ã圹ç«ã€ããšãåè¿°ããŸããã
ãããŠããã®ç¹å®ã®ã±ãŒã¹ã§ã¯ãç§ã¯èªåã®æã®åãèžã¿ãŸãã誰ããç§ã®ä»¥åã®èšäºãèªãã ããšããããªãã圌ãã¯ç§ãHALãå«ãããšãç¥ã£ãŠããŸãã HALãšæé©åã¯2ã€ã®äºææ§ã®ãªããã®ã§ããå®éã®ãããžã§ã¯ãã§ã¯ãããŒããŠã§ã¢ã䜿çšããçŽæ¥äœæ¥ããŸãã¯Konstantin Chizhovã®ãã©ã€ããŒïŒmcucppã©ã€ãã©ãªïŒã䜿çšããŸãããããããã®ç¹å®ã®ã±ãŒã¹ã§ã¯ãããã¯ãŸã£ããåœãŠã¯ãŸããŸãããããã¹ãã衚瀺ããCOMããŒãã§åäœããããã°ã©ã ãäœæããŠããã ãã§ããã¯ããã¯åšæ³¢æ°ãæ°çŸã¡ã¬ãã«ãã®ã³ã³ãããŒã©ãŒãæ£çŽãªãšããããªãã®æ代ã«ã¯ãéåžžã®BK-shkaãããã«å¯ŸåŠãããã®ããã»ããµã¯3MHzã®åšæ³¢æ°ã§åäœããŠããŸãããããã«ãBK-shkiã«ã¯RISCã³ãã³ãããªãããã€ãã©ã€ã³ãããããŸããã§ãããããããå€éåããããã¹ïŒã€ãŸãããµã€ã¯ã«ããšã«æ°ã¯ããã¯ïŒãšãã£ãã·ã¥ãªãã®éåæDRAMããããŸãããèŠããã«ãããã©ãŒãã³ã¹ã¯ã1ç§ãããããã30äžåã®ã¬ãžã¹ã¿ãŒã¬ãžã¹ã¿ãŒæäœã§ããããããŠãããã¯ããã¹ãåºåã®åé¡ã解決ããUARTã§ïŒIRPSãããã¯ãä»ããŠïŒåäœããã®ã«ååã§ãããã€ãŸããææ°ã®STM32ã§ã®ãã®ã¿ã¹ã¯ã«å¯ŸããHALã³ãŒãã®æé©æ§ã¯ãç®åã®ã¿ã¹ã¯ã«ãååã§ãããã ããHALã䜿çšããå Žåã®éçºé床ã¯æé«ã«ãªããŸãã
æ°ããããŒãã衚瀺ãããŸããçµ±åãããåŒã³åºããæ¥ç¶ãããHALã確å®ã«å«ãŸããŸããæ·»ä»ã®UARTã®äŸã«åŸã£ãŠãå žåçãªäŸã®åæåãä¿®æ£ããŸããäœæ¥ã¯åžžã«åãã§ããéçºé床ã¯æ°ååã§ããæèšãããããŸãããã€ãŸãããã®åé¡ã解決ããã«ã¯ãæŠéã®å Žåã¯å¥œãã§ã¯ãããŸããããHALã䜿çšããã®ãééããªãæåã§ãã
ãã¹ãŠãçè«ã®æå°å€ããããªãã§ã¯å®è·µã«é²ãããšã¯äžå¯èœã ãšç§ã¯èšã£ããå®éšå®€ã§ã®äœæ¥ã®åŸããã詳现ãªçè«çäºé ãã話ãããŸããããã§ã¯ãå®éšã«ç§»ããŸãããã
3.ãšã³ããŠãŒã¶ãŒããã¹ãããš
3.1ããã±ãŒãžãããŠã³ããŒããã
ãããããã«ç¬èªã®ãã®ãäœæããã€ããã¯ãããŸããããæåã«ãAll-HardwareWebãµã€ãããååŸããæ¢è£œã®äŸãè©ŠããŠã¿ãããšæããŸãããããæ§ç¯ããŠå®è¡ããã«ã¯äœãå¿ èŠã§ããïŒãŸããç¹å®ã®ããŒãã®ã©ã€ãã©ãªãããŠã³ããŒãããå¿ èŠããããŸãããªãŒãã³ãœãŒã¹ãœãªã¥ãŒã·ã§ã³ã䜿çšããŠãããšããããžã§ã¯ããããŠã³ããŒãããã ãã§ã¯äžååã§ãããšããäºå®ã«ãã§ã«æ°ã¥ããŸããã100,500ã®ããŒã«ãã€ã³ã¹ããŒã«ãã100,500ã®ãµãŒãããŒãã£ã©ã€ãã©ãªãããŠã³ããŒãããå¿ èŠããããŸããããã§ã¯ã1ã€ã®ãã¡ã€ã«ãããŠã³ããŒãããŠè§£åããã ãã§æžã¿ãŸãã確ãã«ã圌ã®ãµã€ãºã¯å·šå€§ã§ããããããå 容ã¯çŽ æŽãããã§ãããããSTM32CubeMXã®ããã±ãŒãžãå¿ èŠã§ããããã§ããªããžããªãžã®çŽæ¥ãªã³ã¯ã¯æ¬¡ã®ããã« ãªããŸã
ãwww.st.com / en / development-tools / stm32cubemx.htmlïŒtools-software
ããŠã³ããŒãããå¿ èŠã®ããããã±ãŒãžã次ã®è¡šã«ç€ºããŸãã
æ¯æã | ããã±ãŒãž |
---|---|
STM32F429Iãã£ã¹ã«ããªãŒ | STM32CubeF4 |
STM32F469Iãã£ã¹ã«ããªãŒ | STM32CubeF4 |
STM32G474RE DPOW1ãã£ã¹ã«ããªãŒïŒç»é¢ãªãïŒ | STM32CubeG4 |
STM32F746Gãã£ã¹ã«ããªãŒ | STM32CubeF7 |
STM32H747Iãã£ã¹ã«ããªãŒ | STM32CubeH7 |
3.2ãããžã§ã¯ããã³ããŒããŠäœæ¥ãéå§ãã
ããã±ãŒãžã®æ§é ã¯å éšã§åãã§ããããã次ã®éå±€ã®ãã£ã¬ã¯ããªã«ç§»åããŸãïŒ
<ããã±ãŒãžå> \ãããžã§ã¯ã\ <ããŒãå> \ã¢ããªã±ãŒã·ã§ã³\ STemWinã
ããã«äŸããããã£ã¬ã¯ããªãã³ããŒããŸãã次ã®ãããªãã®ãåŸãããŸãã
ã©ã€ãã©ãªãžã®ãã¹ã¯çžå¯Ÿåœ¢åŒã§èšè¿°ãããããããã£ã¬ã¯ããªã®å Žæã¯éèŠã§ããæ¬ èœããŠãããã¡ã€ã«ã®æ°ãéåžžã«å€ãããã«ãããžã§ã¯ãããã«ããããŠããªãå Žåã¯ããã£ã¬ã¯ããªéå±€å ã®å Žæãæšæž¬ããŠããŸãããã«ã¿ãã°ãå ¥åããéçºç°å¢ã®1ã€ã«å¯Ÿå¿ãããããžã§ã¯ãããªã¢ã³ããéžæãããããžã§ã¯ããéããŠæäœããŸã...æé ã®çµããã§ãã
3.3 STM32G474REDPOW1ãã£ã¹ã«ããªãŒããŒãã®æ©èœ
ãã®ããŒãã«ã¯ç»é¢ããããŸãããã€ãŸããå°çšããã±ãŒãžã«STemWinã«ã¿ãã°ããããŸããããããã£ãŠããããžã§ã¯ãã¯æ¬¡ã®ã¬ãã«ã«é 眮ããå¿ èŠããããŸãïŒ
\ STM32Cube_FW_G4_V1.3.0 \ Projects \ B-G474E-DPOW1 \ Examples \ UART
4.ãããžã§ã¯ãã®äœææ¹æ³
äŸãçµã¿ç«ãŠãã®ãããã«ç°¡åãã¯æããã§ãã次ã«ããããã®äŸãã©ã®ããã«è¡ãããããèŠãŠã¿ãŸããããããããããã®æ å ±ã¯ãç»é¢ã«ããã¹ãã衚瀺ãã以å€ã®ããšãããã人ã«åœ¹ç«ã€ã§ããããããŠãæ°ã¶æåŸã«æ¬¡ã®ããŒãã玹ä»ããå¿ èŠããããç§ããã§ã«ãã¹ãŠãå¿ããŠããŸã£ããšããç§èªèº«ããã®èšäºãéããŠç§ã®èšæ¶ã®æ瀺ãæŽæ°ããŸãã
4.1UARTã®è¿œå ãšåæå
å žåçãªSTemWinHello Worldã®äŸã«ã¯ãäºæ³éãUARTããããŸãããè¿œå ããå¿ èŠããããŸãããµã³ãã«ã³ãŒããååŸããŠè¿œå ããŠããããã§ããæ²ããããªã人çã¯ãã£ãšè€éã§ããäœæ¥æ©èœã§ã¯ããã®ããã«ããŸãããã ããåæåäžã«ã¯åŸ®åŠãªéãããããŸãããŸããããŸããŸãªãããã¿ã€ãã³ã°ããŒãã«ã¯ãJTAGã¢ããã¿ãŒã«çµã¿èŸŒãŸããUSB-UARTã¢ããã¿ãŒã«æ¥ç¶ãããããŸããŸãªããŒãããããŸããã©ã¡ããæ¥ç¶ãããŠããããããŒãã®èª¬æã確èªããå¿ èŠããããŸããéåžžããã¡ããUSART1ã§ãããå確èªããããšããå§ãããŸãã
ããã«ãã³ã³ãããŒã©ãŒãéçºãããã«ã€ããŠãããŸããŸãªæçšãªæ©èœãUARTæ©åšã«è¿œå ããããšããäºå®ã«ãã£ãŠãå€æ§æ§ãå°å ¥ãããŸãããŸããæ°ããããŒãã®HALã§åæåããå¿ èŠããããŸããç¹ã«ãFIFOã§ã®äœæ¥ã
ãããã£ãŠã次ã®äžè¬çãªæé ããå§ãããŸãã
- ããŒããã³ãã«ãè¿œå ããŸãã
- UARTããŒããŠã§ã¢åæåãè¿œå ããŸãã
- UARTãã³ã®åæåãè¿œå ããŸãã
- UARTå²ã蟌ã¿ãã³ãã©ãŒãè¿œå ããŸãã
ãã³ãã«ãä»ããŠããã®ã§ããã¹ãŠãæ確ã§æ®éçã§ãã次ã®ããã«ãªããŸãã
UART_HandleTypeDef huart1;
ãã£ã¬ã¯ããªã®äŸã®æ®ãã®éšåãåç §ããŠãã ãã\ <ããã±ãŒãžå> \ãããžã§ã¯ã\ <ããŒãå> \äŸ\ UARTã
ããšãã°ãproject \ STM32Cube_FW_H7_V1.8.0 \ Projects \ STM32H747I-DISCO \ Examples \ UART \ UART_WakeUpFromStopUsingFIFOã
mainïŒïŒé¢æ°ã«ã¯ãUARTèªäœã®åæåããããŸãïŒé床ã9600ã§ããããšã確èªããå¿ èŠããããŸããããã§ãªãå Žåã¯ãå ¥åããŠãã ããïŒãã¬ãã°ãšã®æ¥ç¶ã¯ã
voidé¢æ°HAL_UART_MspInitïŒUART_HandleTypeDef * huartïŒã®å¥ã®ãã¡ã€ã«ã§æ§æãããŸãã
ç§ã¯ããããã¹ãŠ1ã€ã®æ©èœã«ãŸãšããããšã奜ã¿ãŸããæéãéãããŠããã®ã§ããããã®è³æãããã®ãããªé¢æ°ãã³ã³ãã€ã«ããmain.cãã¡ã€ã«ã«é 眮ããmainïŒïŒé¢æ°ããåŒã³åºãããšãå¿ããªãããã«ããŸããã
static void MX_USART1_UART_Init(void)
{
/* USER CODE BEGIN USART1_Init 0 */
GPIO_InitTypeDef GPIO_InitStruct;
/* USER CODE END USART1_Init 0 */
/* USER CODE BEGIN USART1_Init 1 */
// __HAL_RCC_LPUART1_CLK_ENABLE();
__HAL_RCC_USART1_CLK_ENABLE();
/* USER CODE END USART1_Init 1 */
huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart1.Init.OverSampling = UART_OVERSAMPLING_16;
huart1.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
huart1.Init.ClockPrescaler = UART_PRESCALER_DIV1;
huart1.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
if (HAL_UART_Init(&huart1) != HAL_OK)
{
Error_Handler();
}
if (HAL_UARTEx_SetTxFifoThreshold(&huart1, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
{
Error_Handler();
}
if (HAL_UARTEx_SetRxFifoThreshold(&huart1, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
{
Error_Handler();
}
if (HAL_UARTEx_EnableFifoMode(&huart1) != HAL_OK)
{
Error_Handler();
}
/* Enable the UART RX FIFO threshold interrupt */
__HAL_UART_ENABLE_IT(&huart1, UART_IT_RXFT);
/* Enable the UART wakeup from stop mode interrupt */
__HAL_UART_ENABLE_IT(&huart1, UART_IT_WUF);
/* USER CODE BEGIN USART3_Init 2 */
__HAL_RCC_GPIOA_CLK_ENABLE();
/*##-2- Configure peripheral GPIO ##########################################*/
/* UART TX GPIO pin configuration */
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* UART RX GPIO pin configuration */
GPIO_InitStruct.Pin = GPIO_PIN_10;
GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* NVIC for USART */
HAL_NVIC_SetPriority(USART1_IRQn, 0, 1);
HAL_NVIC_EnableIRQ(USART1_IRQn);
/* USER CODE END USART1_Init 2 */
}
, , JTAG. . â , JTAG , . .ãŸããå²ã蟌ã¿ã¯ç°¡åã§ããäŸã§_it.cãµãã£ãã¯ã¹ãä»ãããã¡ã€ã«ãæ¢ããŠãããUARTè¡ããããžã§ã¯ãã®_itãµãã£ãã¯ã¹ãä»ãããã¡ã€ã«ã«è»¢éããŸãã
ãã®å Žåããã¡ã€ã«
\ STM32Cube_FW_H7_V1.8.0 \ Projects \ STM32H747I-DISCO \ Examples \ UART \ UART_WakeUpFromStopUsingFIFO \ CM7 \ Src \ stm32h7xx_it.c
ãããã¡ã€ã«
\ STM32Cube_FW_H7_V1.8.0 \ STM32Cube_FW_H \ STemWin \ Demo_H747 \ CM7 \ Core \ Src \ stm32h7xx_it.c
ãã©ã°ã¡ã³ãã転éããŸãïŒ
extern UART_HandleTypeDef huart1;
âŠ
void USART1_IRQHandler(void)
{
HAL_UART_IRQHandler(&huart1);
}
ãã¹ãŠã
4.2äž»ãªäœæ¥æ©èœã®ç·šé
äž»ãªåäœæ©èœã«ãããååãšããŠãã¹ãŠãç°¡åã«ãªããŸãããã ããååãšããŠã§ã¯ãªããç¹ã«-å®å šã§ã¯ãããŸããããããã«ã€ããŠã¯ä»¥äžã§èª¬æããŸãããšãããããã¡ã€ã³é¢æ°ã®æåŸã«åŒã³åºãããé¢æ°ãèŠãŠã¿ãŸãããããã®å Žåããããã¯æ¬¡ã®ãšããã§ãã
MainTask();
ããã¯ãäž»ãªäœæ¥ããã®äžã§è¡ãããããšãæå³ããŸããæ¬äœãåœãµã€ãã®å žåçãªäŸã«çœ®ãæããã ãã§ãã
4.3次ã¯äœã§ããïŒ
ããã«ãUARTæ©åšã§è¡ã£ãããã«ãä»ã®æ©åšã®äŸãéã¶ããšãã§ããŸãã確ãã«ããã®æ©åšã®æäœã®å¶åŸ¡ã¯ããã®èšäºã®ç¯å²ãè¶ ããŠããŸããã芧ã®ãšãããWEBããŒãžã®äžè¬çãªã³ã³ãããŒã«ã¯ãç»åãš1ã€ã®UARTã®ã¿ã§ããæ®ãã¯ããå°ãé£ãã転éãããŸããããã§ããããå€ã«STM32G474REDPOW1ãã£ã¹ã«ããªãŒããŒãã«åºã¥ããŠã¢ãŒã«ã¹ã³ãŒããžã§ãã¬ãŒã¿ãŒãäœæããããã«æ瀺ãããæ¹æ³ã説æããã«ã¯ããããŸããããªãã¿ã®ãªãããŒãã§ãŒãããéçºããããå€ã¯ãäœçŸããŒãžãã®ããã¥ã¡ã³ããèªãæ°ã«ã¯ãªããŸããããããžã§ã¯ããäœäžçŽã«ãããã£ãŠè¡ãããå Žåãç§ã¯åã«ãããæ£ãããªãããšããããŠãã¹ãŠã泚ææ·±ãç 究ããå¿ èŠãããããšãçµå¶é£ã«èšŒæãå§ããã§ãããããããããããžã§ã¯ãã®ã©ã€ããµã€ã¯ã«ãçãã£ããããã§ãç§ã¯äŸãåŒãåºãéãé²ãããšã«ããŸããã
ãããã£ãŠãMorseã³ãŒãã®å Žåãåšæ³¢æ°1 KHzã®ãµã€ã³ãå¿ èŠã§ã...éåžžã®æã®åãã§ããã¡ã€ã«en.stm32cubeg4_v1-3-0.zipã解åãããã£ã¬ã¯ããªDã調ã¹ãŸãïŒ\ tmp \ STM32Cube_FW_G4_V1.3.0 \ Projects \ B-G474E-DPOW1 \äŸ...èŠã€ãããŸãã...
DACãã£ã¬ã¯ããªã«ã¯äœã圹ã«ç«ã¡ãŸããã
ããã§çµããã§ããïŒãããŸããåãã¯ãªã¹ã¿ã«ã䜿çšããä»ã®ããŒãã®äŸãèŠãŠã¿ãŸãããïŒããã±ãŒãžã¯ç°ãªããŸããïŒ...ãããŠãããNucleoããŒãã®çŸããã§ãïŒ
çŸããã¯ãmain.cãã¡ã€ã«å ã«ãµã€ã³ãçæããããã®ããŒãã«ãããããšã§ãã
/* Sine wave values for a complete symbol */
uint16_t sinewave[60] = {
0x07ff,0x08cb,0x0994,0x0a5a,0x0b18,0x0bce,0x0c79,0x0d18,0x0da8,0x0e29,0x0e98,0x0ef4,0x0f3e,0x0f72,0x0f92,0x0f9d,
0x0f92,0x0f72,0x0f3e,0x0ef4,0x0e98,0x0e29,0x0da8,0x0d18,0x0c79,0x0bce,0x0b18,0x0a5a,0x0994,0x08cb,0x07ff,0x0733,
0x066a,0x05a4,0x04e6,0x0430,0x0385,0x02e6,0x0256,0x01d5,0x0166,0x010a,0x00c0,0x008c,0x006c,0x0061,0x006c,0x008c,
0x00c0,0x010a,0x0166,0x01d5,0x0256,0x02e6,0x0385,0x0430,0x04e6,0x05a4,0x066a,0x0733};
ã¯ãã確èªããŸãããã®äŸã§ã¯ãDACåºåã§æ£åŒŠãŸãã¯äžè§åœ¢ãçæããŸãããããŠã¡ããã©1KHzã®åšæ³¢æ°ã§ãçŽ æŽãããã§ãïŒæéãéãããŠããã®ã§ãçè«ãèªãããšããããŸããã§ãããã³ãŒãããã£ãšèŠãŠããã¹ãŠã®åœ¢æãããŒããŠã§ã¢ã¬ãã«ã§è¡ãããããšã確èªããŸããããã®åŸããããžã§ã¯ãã§ã¯ãã³ã³ãããŒã©ãŒãå¿ èŠãªããŒãã®ã³ã³ãããŒã©ãŒãšäº€æããçµã¿ç«ãŠãå ¥åããèµ·åããèã«æ²¿ã£ãŠãªã·ãã¹ã³ãŒããããŒããå®è¡ããåŸããã®ãµã€ã³ãååšããã³ã³ãããŒã©ãŒãèŠã€ããŸããã次ã«ããããã¹ããŒã«ãŒã®å ¥åã«æ¥ç¶ããæ£åŒŠãŸãã¯äžè§åœ¢ã®çæãæ£åŒŠãŸãã¯ç¡é³ã®çæã«çœ®ãæããŸããïŒã¯ãããŒãã®ã¿ããå¥ã®ããŒãã«ãäœæããŸããïŒ...ãŸããã¢ãŒã«ã¹ã³ãŒãã§é©çšããŒããæžãã®ã¯æ¢šãç ²æããã®ãšåããããç°¡åã§ãããç§ã¯è¥ãé ãè»äºéšéããããã倧äœãæãåºããŸãã...
äžè¬ã«ããäŸãèŠã€ããŠã³ãŒãã«æ¿å ¥ãããææ³ã¯éåžžã«å¹æçã§ãããããŠããããã®ãã©ã³ãåãããäŸã¯ãã¹ãŠãã®äžéšã§ããããããå žåçãªäŸãäœæãã-巚倧ãªã©ã€ãã©ãªãããŠã³ããŒãããããšããã¢ãããŒããããã«è²¢ç®ããŠããŸãã
5.çµ±äžã®åé¡
ç§ã®ååã¯ã次ã®å²åŠç声æãåŒçšããã®ã奜ãã§ãã
ãçè«çã«ã¯ãçè«ãšå®è·µã®éã«éãã¯ãããŸãããå®éã«ã¯ããã§ããã
ããŸããŸãªSTM32ãæäœãããšããç§ã¯å®æçã«ãããæãåºããŸãããå¿ ç¶çã«ç°ãªãUARTã«ã€ããŠã¯ãã§ã«è¿°ã¹ãŸããããçµ±åãããStemWinã¯é©ãã¹ãããšã§ã¯ãªãããã§ã...æ瀺ãããŸããïŒ
5.1 STM32H747
ãããŒã¯ãŒã«ãã®ãã£ãã·ã§ã³ãæãããŠããŸããããããäœæ¥ã³ãŒãã転éãããšãéãç»é¢ã衚瀺ãããŸããæåã«èµ€ãç»é¢ã1ç§éæç»ãã次ã«ç·ã1ç§éæç»ãã次ã«éè²ã1ç§éæç»ããŠãããäœæ¥ãéå§ããŸããåæåã®çŽåŸãæç»ã®åã§ãã£ãŠãããã¬ãŒã¯ãã€ã³ããããªã¬ãŒãããšãæåŸã®éå§ããã®ã¿ã€ããŒã®èªã¿åãå€ãç»é¢ã«è¡šç€ºãããŸãã次ã«ããããã¯åãéãç»é¢ã§äžæžããããŸããäœïŒ
3è²ã®åºåã1ç§ããšã«åé€ããããã«äœåãè¿œå ããŸããããã¯æ©èœããŸãããããã«æ°žä¹ ã«ããªãŒãºããŸãã 37ããªç§åŸã«äœãããªãŒãºããããåŸã ã«ç解ããŸããããã¯ã©ããªéæ³ã®æéã§ããïŒ 1ããªç§ã¯æããã§ããã·ã¹ãã ãã£ãã¯ãããã37.ã¯ããå°ãªããšãäœãäžžããè¿ã...
ã©ããããã®é·ããçããããããç§ã¯ãã¹ãŠãå²ã蟌ã¿ãã³ãã©ãŒã«è¡šç€ºãããŠããããšãç¥ããŸããHAL_DSI_IRQHandlerïŒDSI_HandleTypeDef * hdsiïŒãåŒã³åºããããã¹ãŠã衚瀺ãããåŸãåŒã³åºããçµäºããŸãããã¹ãŠããããã¡å ã«åœ¢æãããŸãããç»é¢ã«ã¯è¡šç€ºãããŸãããããæ£ç¢ºã«ã¯ãããã°ã©ã ã®åç¶æéäžã«ãã¹ãŠã2åç»é¢ã«è¡šç€ºãããŸããåæåæïŒéå»ã®äººçããã®åãã¢ãŒãã£ãã¡ã¯ãïŒãš37ããªç§åŸãéã«ãã£ããã¹ãŠã®ãã®ã¯ã誰ã«ãèŠããŸããã
念é ã«çœ®ããŠ-ããªãã¯ããã¥ã¡ã³ããç 究ããäœãäœã§ããããç解ããå¿ èŠããããŸãããããå®éã«ã¯ãã¿ã¹ã¯ã®æéã¯å°ãªãã¯ãããŸãããããããããã§ããäžæãèªçºããå¿ èŠãããããšã¯æããã§ãããã©ã®ããã«ïŒãšã«ããGUI_DelayïŒïŒãåŒã³åºãããŸãããç§ã¯æ£çŽã«GUI_ExecïŒïŒãåŒã³åºãããšããŠããŸã...圹ã«ç«ã¡ãŸããã
äŸã¯æ»ãã§ããŸããããããããã¯é¢çœãã§ããHello Worldã¯ãæåã®37msãšåãããã«åºåãããŸãããããŠ-æ»ãã äŸãããŠãåãã«ã¿ãã°ã®ã¢ãã¡ãŒã·ã§ã³ã®äŸãèŠãŠã¿ãŸãããã圌ã¯åããåŸã ã«ããµã³ãã«ãæ©èœãããããã«ãã©ãã°ããå¿ èŠããããã®ãç解ããŸã...ããã¯ç§ãã¡ã®å žåçãªã³ãŒããã©ã®ããã«èŠãããã§ãïŒ
GUI_SetBkColor(GUI_RED);
GUI_Clear();
GUI_Delay(1000);
GUI_SetBkColor(GUI_GREEN);
GUI_Clear();
GUI_Delay(1000);
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_Delay(1000);
ãŸããããã¯è«ççã§ãïŒãããŠããã¯åäœããŸãïŒ..ä»ã®ããŒãã§ã¯...ãããããã®ãããªç·šéã®åŸãããã¯ã©ããããããH747ã«ç§»åããŸããïŒ
åãããã¹ãã
GUI_MULTIBUF_Begin();
GUI_SetBkColor(GUI_RED);
GUI_Clear();
GUI_MULTIBUF_End();
GUI_Delay(1000);
GUI_MULTIBUF_Begin();
GUI_SetBkColor(GUI_GREEN);
GUI_Clear();
GUI_MULTIBUF_End();
GUI_Delay(1000);
GUI_MULTIBUF_Begin();
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_MULTIBUF_End();
GUI_Delay(1000);
ããããäžè¬çã«ã¯æ©èœããŸããç¹ã«ãèµ€ãšç·ã®ç»é¢ã1ç§éç¶ããéã®ç»é¢ãã¡ãã€ããäœæ¥ç»é¢ãããã«è¡šç€ºãããŸããå°æ°ã®å®éšã®åŸããã¹ãŠããã®åœ¢åŒã§å®å šã«æ©èœãå§ããããšãå€æããŸããã
GUI_MULTIBUF_Begin();
GUI_SetBkColor(GUI_RED);
GUI_Clear();
GUI_MULTIBUF_End();
GUI_MULTIBUF_Begin();
GUI_MULTIBUF_End();
GUI_MULTIBUF_Begin();
GUI_MULTIBUF_End();
GUI_Delay(1000);
GUI_MULTIBUF_Begin();
GUI_SetBkColor(GUI_GREEN);
GUI_Clear();
GUI_MULTIBUF_End();
GUI_MULTIBUF_Begin();
GUI_MULTIBUF_End();
GUI_MULTIBUF_Begin();
GUI_MULTIBUF_End();
GUI_Delay(1000);
GUI_MULTIBUF_Begin();
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_MULTIBUF_End();
GUI_MULTIBUF_Begin();
GUI_MULTIBUF_End();
GUI_MULTIBUF_Begin();
GUI_MULTIBUF_End();
GUI_Delay(1000);
çµ±äžã¯ããã ãã§ã...èšå®ãåå ã§ãããšããçãããããŸããïŒ
/* Define the number of buffers to use (minimum 1) */
#define NUM_BUFFERS 3
ãããããããä¿®æ£ããå®éšã§ã¯çæ³çãªçµæãåŸããããæéã®çµéãšãšãã«è©³çŽ°ã調ã¹ãããšãã§ããŸããã§ãããã³ã¡ã³ãã®èª°ããæ£ããè¡åããæ¹æ³ãæããŠããããããããŸããããã®ã»ã¯ã·ã§ã³ã§ã¯ãéãããéçºæéã®æ¡ä»¶äžã§è¡åããæ¹æ³ã瀺ããŸãããã®éãã³ãŒãã¯ãã®ãããªã²ã©ãç¶æ ã®ãŸãŸã§ãã幞ããããã¯ãã¥ãŒããªã¢ã«ã§ã¯ãªããåäœããã³ãŒãã®äŸã«ãããŸããã
5.2 STM32F429
ãã®ããŒãã¯å€ãã§ãããäœãåé¡ãªã®ã§ããïŒã«ãŒãã£ã¡ã³ãïŒå€ãããŒãã§ã¯ãååšããŠããããé·ãéæ©èœããªããªã£ãå¯ç£ç©ãåºãŠããŸããHello Worldã®äŸãå®è¡ããŠã次ãåç §ããŠãã ããã
ç»åã¯éåžžã®ç»åã«å¯ŸããŠ90床å転ããŠããŸããäœãç°¡åã§ããããïŒ2016幎ã«ãMZ3D 3Dããªã³ã¿ãŒã®ãã¡ãŒã ãŠã§ã¢ãArduinkaããSTM32F429ã«ãã©ãã°ããŠãããšãã«ãç§ã¯ç°¡åãªèšå®ã§å人çã«åçãããããŸãããããå æžã«ããŠãããã¯ã©ãã§ããïŒãããŠãããã«èšå®ããããŸãïŒ
#define LCD_SWAP_XY 1
#define LCD_MIRROR_Y 1
ããããå€æŽããããšããŠãã圹ã«ç«ã¡ãŸããããããã䜿çšãããŠããå Žæã確èªããŠããŸã...ããããã©ãã«ããããŸããïŒçºè¡šãããã°ããã§ããDMA2Dãå®è£ ããããšãã«åŠçãåæ¢ãããšæãããŸãããä¿èšŒã¯ããŸããããã ããåãæ©èœããããŸããæ°åã®ãã©ãŒã©ã ããã®ã¢ããã€ã¹ããããŸããç§ã¯2016幎ã«ãã®æ©èœã䜿çšããŸããïŒ
GUI_SetOrientation(GUI_SWAP_XY)
ãã©ãŒãªã³ã°å®æ°ãè¿œå ãããã®ããããŸã...ããããèŠç¹ã§ã¯ãããŸããããã®æ©èœã¯2020幎ã«ã¯æ©èœããŸããïŒåäœããŸãããããã ãã§ãïŒãããŠãã©ã€ãã©ãªã¯ãªããžã§ã¯ã圢åŒã§æäŸãããŸããããªããããæ©èœããªãã®ãã誰ã«ãããããŸããã
ãŸããç§ã¯ãŸã ç»é¢ãç解ããŠããŸãããã¡ã€ã«\ STM32F429-DISC1 \ Drivers \ BSP \ Components \ ili9341 \ ili9341.cã«ç§»åããŸãïŒã¯ããæžã蟌ã¿ä¿è·ãããŠããŸãããç°¡åã«åé€ã§ããŸãïŒãã°ã©ãã£ãã¯ãããã¯ããã§æ§æãããŸããå€ãããŸãã
åãããã¹ãã
ili9341_WriteReg(LCD_MAC);
ili9341_WriteData(0xC8);
ãªã³
åãããã¹ãã
ili9341_WriteReg(LCD_MAC);
ili9341_WriteData(0x48|0x20);
ãã¡ãããç»åã¯å転ããŸã...ãããããããã¡ã¯æããã«å€å°æ£ããæ§æãããŠããŸããã
ãããã¯å¯žæ³ã§ãã
#define XSIZE_PHYS 240
#define YSIZE_PHYS 320
ãŸããäœæ¥ã«åœ±é¿ãäžããããšã¯ãããŸãããåãããšããã®ãµã€ãã«ãåœãŠã¯ãŸããŸãã
#define ILI9341_LCD_PIXEL_WIDTH ((uint16_t)240)
#define ILI9341_LCD_PIXEL_HEIGHT ((uint16_t)320)
ãããããã®ãµã€ãã¯ãã£ãšèå³æ·±ããã®ã§ãã
if (LCD_GetSwapXYEx(0)) {
LCD_SetSizeEx (0, YSIZE_PHYS, XSIZE_PHYS);
LCD_SetVSizeEx(0, YSIZE_PHYS * NUM_VSCREENS, XSIZE_PHYS);
} else {
LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS);
LCD_SetVSizeEx(0, XSIZE_PHYS, YSIZE_PHYS * NUM_VSCREENS);
}
ç§ã¯æ¥œãã¿ã®ããã«åŠå®ãè¿œå ããŸããïŒ
åãããã¹ãã
if (!LCD_GetSwapXYEx(0)) {
LCD_SetSizeEx (0, YSIZE_PHYS, XSIZE_PHYS);
LCD_SetVSizeEx(0, YSIZE_PHYS * NUM_VSCREENS, XSIZE_PHYS);
} else {
LCD_SetSizeEx (0, XSIZE_PHYS, YSIZE_PHYS);
LCD_SetVSizeEx(0, XSIZE_PHYS, YSIZE_PHYS * NUM_VSCREENS);
}
ç§ã¯ãã®çŸãããåŸãŸããã
ç§ã¯ä»ã®å®éšã§äŒŒãŠããŸããããŸã£ããåãçŸããã§ã¯ãããŸããã§ãããããèŠããŠããŸãã...èŠããã«ãç§ãã¡ã¯çåãæ®å¿µãªçµè«ã«éããŸãããç§ãã¡ã¯åº§ã£ãŠãããæŽçããå¿ èŠããããŸã...ããããè£å€ã«å²ãåœãŠãããæéã¯ãããŸãããäœããã¹ããïŒå¹žããªããšã«ãç§ã¯ãã®è³ªåã«å¯ŸããçããGoogleããåŸãããšãã§ããŸããããã®çµæããã¢ã¢ããªã±ãŒã·ã§ã³ã®äžè¬çãªã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
GUI_DispStringHCenterAt("www.all-hw.com", xSize / 2, 20);
ãŸããF429ã®å Žåã¯ã次ã®åœ¢åŒã«çž®å°ããå¿ èŠããããŸãã
GUI_RECT Rect = {20-10, 0, 20+10, xSize};
GUI_DispStringInRectEx("www.all-hw.com", &Rect,
GUI_TA_HCENTER | GUI_TA_VCENTER,
20, GUI_ROTATE_CCW);
å転ããããã¹ããåºåããæ©èœã䜿çšããŸãããã ãããã®ããã«ã¯ããrectangleããšã³ãã£ãã£ãè¿œå ããå¿ èŠããããŸããããŠãããªãã¯äœãã§ããŸããããããŠãã«ãŠã³ã¿ãŒã¯ãæ°åãå°å·ããæ©èœã§ã¯ãªããæåã«æååã圢æãã次ã«ãããå転ãããŠè¡šç€ºããããšã«ãã£ãŠè¡šç€ºããå¿ èŠããããŸãããããããã§ãªããã°ããã¹ãŠãã»ãŒæ®éçã«ãªããŸãããéã«ããã®æ¹æ³ã§ã©ãã«ã§ãããã¹ãã衚瀺ããããšã¯å¯èœã§ãããã©ãã«ã§ãå転ãã©ã°ã瀺ãããšã¯ã§ããŸãããããããããã¯ãã§ã«åé¯ããŠããããã«ç§ã«ã¯æããŸãã
6.çµè«
éçºè ã®èŠ³ç¹ãšãããŒãã®ãã¢ã¢ããªã±ãŒã·ã§ã³ãããŠã³ããŒãããã ãã§ãç©ççãªããšãèããã«ãã«ãããããŠãŒã¶ãŒã®èŠ³ç¹ã®äž¡æ¹ãããããŸããŸãªSTM32ããŒãã®äžè¬çãªããã°ã©ã ãéçºããæ¹æ³ãæ€èšããŸããããŸããæ®å¿µãªãããã³ãŒãã®çµ±å床ã¯é«ããã®ã®ã100ïŒ ã«ã¯éããŠããªãããšã瀺ãäŸã調ã¹ãŸãããåŸãããç¥èã¯ãè³Œå ¥ã«ãéããããããšãªãããªãŒã«ããŒããŠã§ã¢ãµãŒãã¹ãéããŠç°ãªãããŒããšäº€äºã«äœæ¥ããããšã§ç¢ºèªã§ããŸãã
ãã®èšäºã¯ãç©äºãããªãè¡šé¢çã«æŽçããæ¹æ³ã瀺ããŠããŸããããã«ãããç¹å®ã®ããŒãããã°ãããã¹ã¿ãŒã§ããŸãããããããã¡ãããããªãã圌女ãšé·ãä»ãåãã»ã©ãããªãã¯ããæ·±ãç¥èãåŸãã§ããããå®éã®åé¡ã解決ããå Žåãããã¯éåžžã«éèŠã§ããäœæè ãããã»ã¹ã®ç©çãç解ããŠããªãè€éãªããã°ã©ã ã¯ãã¢ã«ãŽãªãºã ã®ãšã©ãŒãžã®ãã¹ã§ããããã§ããçããã«ãã¹ãŠãååã«æ·±ããã¹ã¿ãŒããŠããã ããããšæããŸããã¯ããAllHardwareãµãŒãã¹ã®ããŒããŠã§ã¢ã䜿çšããŠããŸãã