ARM Cortex STM32
Ярлыки
_GetPixelIndex
(1)
_SetPixelIndex
(1)
3-phase
(1)
800x480
(1)
АЦП
(1)
генератор
(1)
синхронный усилитель
(2)
структура
(1)
учебный курс
(1)
шаговый двигатель
(1)
ШИМ
(2)
accert
(1)
AD7608
(1)
AD8429
(1)
ADC
(5)
amplifer
(1)
arccos
(1)
arcsin
(1)
arctang
(2)
arctg
(3)
ARM
(2)
arm_sqrt_q15
(2)
assembler
(6)
ASSERT
(1)
atan
(2)
bit
(1)
Bitband
(1)
boot
(3)
bootlloader
(1)
BUTTON
(1)
C
(5)
C#
(1)
CAN
(2)
CC2530
(5)
CMSIS
(4)
command
(1)
Cordic
(1)
Core746I
(1)
CubeMX
(4)
DBGMCU
(2)
debug
(2)
debug.ini
(1)
delegate
(1)
Digital Potentiometers
(1)
DigitalPOT
(1)
Discovery
(1)
DMA
(9)
DMA2D
(1)
DSP
(1)
DSP library
(1)
DWT
(1)
EFM32
(5)
EmWin
(9)
EXTI
(1)
FATFS
(1)
FMC
(2)
FreeRTOS
(2)
gl868-dual cmux
(1)
GPIO
(4)
GUI
(2)
GUIBuilder
(1)
GUIDRV_CompactColor_16
(1)
HAL
(3)
HappyGecko
(1)
Hard Fault
(2)
heap
(1)
I2C
(1)
ID
(1)
ILI9320
(1)
ILI9325
(1)
Initialisation
(1)
InitLTDC
(1)
Instrumentithion
(1)
Interrupt
(4)
ITR
(1)
JTAG
(1)
Keil
(5)
LCDConf
(2)
lock-in
(1)
LTCD
(1)
LTDC
(3)
main
(1)
memory
(1)
MINI_STM32 Revision 01
(1)
nBoot0
(1)
NVIC
(1)
OnePulse
(2)
OSAL
(4)
pack
(1)
phase
(1)
printf
(3)
Pulse
(1)
PWM
(12)
RCC
(2)
RCR
(1)
Register
(1)
RESET
(2)
RS232
(3)
RSS
(1)
RTC
(3)
RTOS-RTX
(1)
RTT
(1)
RTX-RTOS
(1)
SDCard
(1)
SDRAM
(6)
Segger
(2)
SPI
(3)
sqrt
(3)
SSD1298
(1)
SSD1963
(1)
Standart Peripherial Library
(3)
STANDBAY
(1)
startup
(1)
STemWin
(8)
stepper motor
(1)
STlink
(2)
STM32
(17)
STM32429ZI
(1)
STM32Cube
(1)
STM32DBG.IN
(1)
STM32F
(28)
STM32F0
(4)
STM32F1
(13)
STM32F4
(10)
STM32F4 Discovery
(1)
STM32F407ZG
(1)
STM32F429
(2)
STM32F746
(1)
STOP
(1)
string
(1)
struct
(1)
SWD
(1)
SWD JTAG
(1)
Synhronization
(1)
system_stm32f4xx.c
(1)
SystemInit
(1)
SysTick
(1)
task
(4)
telit
(1)
TIM
(27)
typedef
(1)
UART
(1)
USART
(9)
viewer
(2)
WM_PAINT
(1)
Z-stack
(5)
ZigBee
(5)
понедельник, 26 июля 2021 г.
вторник, 7 июля 2020 г.
External memory programming
Keil FLM file function
Init
EraseSector
UnInit
EraseChip
ProgramPage
Verify
BlankCheck
Init
EraseSector
UnInit
EraseChip
ProgramPage
Verify
BlankCheck
ARM Linker
Set var address for QSPI
const unsigned char __test[] = {...
const unsigned char __test[] __at(0x90000000) = { ...
const unsigned char __test[] = {...
const unsigned char __test[] __at(0x90000000) = { ...
LOAD_ROM 0x0000 0x8000 ; Name of load region (LOAD_ROM), ; Start address for load region (0x0000), ; Maximum size of load region (0x8000) { EXEC_ROM 0x0000 0x8000 ; Name of first exec region (EXEC_ROM), ; Start address for exec region (0x0000), ; Maximum size of first exec region (0x8000) { * (+RO) ; Place all code and RO data into ; this exec region } SRAM 0x10000 0x6000 ; Name of second exec region (SRAM), ; Start address of second exec region (0x10000), ; Maximum size of second exec region (0x6000) { * (+RW, +ZI) ; Place all RW and ZI data into ; this exec region } }
пятница, 7 февраля 2020 г.
TouchGFX & Keil in CubeMX project
After generation project from CubeMX
Error: L6218E: Undefined symbol MX_FREERTOS_Init() (referred from main.o).
Error: L6218E: Undefined symbol GRAPHICS_MainTask (referred from freertos.o).
Correct
main.cpp
void MX_FREERTOS_Init(void) -> extern "C" void MX_FREERTOS_Init(void);
BoardConfiguration.cpp
void GRAPHICS_MainTask(void) -> extern "C" void GRAPHICS_MainTask(void)
Error: L6218E: Undefined symbol MX_FREERTOS_Init() (referred from main.o).
Error: L6218E: Undefined symbol GRAPHICS_MainTask (referred from freertos.o).
Correct
main.cpp
void MX_FREERTOS_Init(void) -> extern "C" void MX_FREERTOS_Init(void);
BoardConfiguration.cpp
void GRAPHICS_MainTask(void) -> extern "C" void GRAPHICS_MainTask(void)
четверг, 21 июня 2018 г.
Touchscreen function correction
static void BSP_Pointer_Update(void)
{
GUI_PID_STATE TS_State;
static TS_StateTypeDef prev_state;
TS_StateTypeDef ts;
uint16_t xDiff, yDiff;
BSP_TS_GetState(&ts);
TS_State.Pressed = ts.TouchDetected;
xDiff = (prev_state.X > ts.X) ? (prev_state.X - ts.X) : (ts.X - prev_state.X);
yDiff = (prev_state.Y > ts.Y) ? (prev_state.Y - ts.Y) : (ts.Y - prev_state.Y);
//if(ts.TouchDetected)
//{
if((prev_state.TouchDetected != ts.TouchDetected )|| (ts.TouchDetected &&
((xDiff > 3 )||
(yDiff > 3))))
{
prev_state = ts;
TS_State.Layer = 0;
TS_State.x = ts.X;
TS_State.y = ts.Y;
GUI_TOUCH_StoreStateEx(&TS_State);
if(ts.TouchDetected)
osDelay(50);
}
//}
}
{
GUI_PID_STATE TS_State;
static TS_StateTypeDef prev_state;
TS_StateTypeDef ts;
uint16_t xDiff, yDiff;
BSP_TS_GetState(&ts);
TS_State.Pressed = ts.TouchDetected;
xDiff = (prev_state.X > ts.X) ? (prev_state.X - ts.X) : (ts.X - prev_state.X);
yDiff = (prev_state.Y > ts.Y) ? (prev_state.Y - ts.Y) : (ts.Y - prev_state.Y);
//if(ts.TouchDetected)
//{
if((prev_state.TouchDetected != ts.TouchDetected )|| (ts.TouchDetected &&
((xDiff > 3 )||
(yDiff > 3))))
{
prev_state = ts;
TS_State.Layer = 0;
TS_State.x = ts.X;
TS_State.y = ts.Y;
GUI_TOUCH_StoreStateEx(&TS_State);
if(ts.TouchDetected)
osDelay(50);
}
//}
}
среда, 13 июня 2018 г.
New version GUIBuilder from Segger color setting
For set color operations
Old (5.28) example
GUI_SetBkColor(0x00361400);
New (5.40) example
GUI_SetBkColor(GUI_MAKE_COLOR(0x00361400));
Old (5.28) example
GUI_SetBkColor(0x00361400);
New (5.40) example
GUI_SetBkColor(GUI_MAKE_COLOR(0x00361400));
вторник, 12 июня 2018 г.
CubeMX 4.25 & 4.26 GRAPHICS configuration MULTIBUF bug
If we create a graphics window for GRAPHICS configuration with GUIBuilder for file GUI_App.c
CreateWindow();
The CubeMX is creates function in file STemwin_wrapper.c
void GRAPHICS_Init(void)
{
/* Initialize the GUI */
GUI_Init();
//WM_MULTIBUF_Enable(1);
/* Enable the multi-buffering functionality */
/* Activate the use of memory device feature */
/* USER CODE BEGIN WM_SetCreateFlags */
//WM_SetCreateFlags(WM_CF_MEMDEV);
/* USER CODE END WM_SetCreateFlags */
}
If you delete comments
WM_MULTIBUF_Enable(1);
/* Enable the multi-buffering functionality */
/* Activate the use of memory device feature */
/* USER CODE BEGIN WM_SetCreateFlags */
WM_SetCreateFlags(WM_CF_MEMDEV);
after this, the graphical interface stops running !!!
(Attention! After deleting comments and compiling, turn off and turn on the power)
The problem is solved by adding a line
WM_MULTIBUF_Enable(1);
/* Enable the multi-buffering functionality */
/* Activate the use of memory device feature */
/* USER CODE BEGIN WM_SetCreateFlags */
HAL_LTDC_ProgramLineEvent(&hltdc, 0); //!!!!!!!!!!!!!!!!!!!!!!!
WM_SetCreateFlags(WM_CF_MEMDEV);
/* USER CODE END WM_SetCreateFlags */
And everything works fine!
P.S.
If FREERTOS is used, it is necessary to eliminate one more bug
in file ..........STemWin\Target\STemwin_wrapper.c comment
line (85):
//extern volatile GUI_TIMER_TIME OS_TimeMS;
line (876) :
// OS_TimeMS++;
CreateWindow();
The CubeMX is creates function in file STemwin_wrapper.c
void GRAPHICS_Init(void)
{
/* Initialize the GUI */
GUI_Init();
//WM_MULTIBUF_Enable(1);
/* Enable the multi-buffering functionality */
/* Activate the use of memory device feature */
/* USER CODE BEGIN WM_SetCreateFlags */
//WM_SetCreateFlags(WM_CF_MEMDEV);
/* USER CODE END WM_SetCreateFlags */
}
If you delete comments
WM_MULTIBUF_Enable(1);
/* Enable the multi-buffering functionality */
/* Activate the use of memory device feature */
/* USER CODE BEGIN WM_SetCreateFlags */
WM_SetCreateFlags(WM_CF_MEMDEV);
after this, the graphical interface stops running !!!
(Attention! After deleting comments and compiling, turn off and turn on the power)
The problem is solved by adding a line
WM_MULTIBUF_Enable(1);
/* Enable the multi-buffering functionality */
/* Activate the use of memory device feature */
/* USER CODE BEGIN WM_SetCreateFlags */
HAL_LTDC_ProgramLineEvent(&hltdc, 0); //!!!!!!!!!!!!!!!!!!!!!!!
WM_SetCreateFlags(WM_CF_MEMDEV);
/* USER CODE END WM_SetCreateFlags */
And everything works fine!
P.S.
If FREERTOS is used, it is necessary to eliminate one more bug
in file ..........STemWin\Target\STemwin_wrapper.c comment
line (85):
//extern volatile GUI_TIMER_TIME OS_TimeMS;
line (876) :
// OS_TimeMS++;
пятница, 11 мая 2018 г.
Heap memory location
#include <
stdlib.h
>
/**************************************************************************/
// Keil uv4 MICROLIB compatible heap initialization
extern unsigned long __microlib_freelist;
extern unsigned long __microlib_freelist_initialised;
extern unsigned long __heap_base;
extern unsigned long __heap_limit;
/**************************************************************************/
void add_heap(unsigned long addr, unsigned long size)
{
unsigned long *p = (unsigned long *)addr;
unsigned long span;
size >>= 2; // size in 32-bit words
size -= 2; // two words used for internal structures
if (__microlib_freelist_initialised == 0) // free list created yet?
{
__microlib_freelist_initialised = 1;
__microlib_freelist = 0;
span = 0;
}
else
{
span = __microlib_freelist - addr - (size << 2); // faux allocation across the discontinuity
}
p[0] = size << 2; // size of list entry
p[1] = __microlib_freelist; // next entry
p[size] = span;
p[size+1] = 0; // terminal value
__microlib_freelist = addr; // current entry
}
/**************************************************************************/
void alloc_heaps(void) // Called prior to any malloc()
{
// Enumerate available heap memory regions in DECENDING memory order
//add_heap(0xD0000000, 0x800000); // SDRAM 8MB - Must be initialized
add_heap((unsigned long)&__heap_base,(unsigned long)&__heap_limit - (unsigned long)&__heap_base); // Classic HEAP section
// add_heap(0x20004000, 0x14000); // SRAM (PORTION OF)
add_heap(0x10000000, 0x10000); // CCM 64K
}
===============================================================================
// STM32 Keil SDRAM HEAP STM32F429I-DISCO
// Use MicroLIB checked in options
// Use Scatter file in Linker options (not Memory Layout from Target Dialog)
/* heap.sct
LR_IROM1 0x08000000 0x00200000 { ; load region size_region
ER_IROM1 0x08000000 0x00200000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}
RW_IRAM1 0x20000000 0x00030000 { ; Internal SRAM
.ANY (+RW +ZI)
}
RW_IRAM2 0x10000000 UNINIT 0x00010000 { ; Internal CCM SRAM
*(.ccm)
}
RW_RAM1 0xD0000000 UNINIT 0x00800000 { ; External SDRAM
*(HEAP)
}
}
*/
/* startup_stm32f429_439xx.s
...
Heap_Size EQU 0x00800000
AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base
Heap_Mem SPACE Heap_Size
__heap_limit
...
*/
#include <
stdio.h
>
#include <
stdlib.h
>
#include "stm32f429i_discovery.h"
#include "stm32f429i_discovery_sdram.h"
/**************************************************************************************/
int main(void)
{
char *p;
/* Make sure to initialize the external memory, pins and buses before using them */
/* SDRAM Initialization */
SDRAM_Init();
/* Disable write protection */
FMC_SDRAMWriteProtectionConfig(FMC_Bank2_SDRAM,DISABLE);
p = malloc(0x1000);
printf("Allocation at %p\n", p);
free(p);
while(1); // Don't want to exit
}
//******************************************************************************
// Hosting of stdio functionality through SWV - Serial Wire Viewer
//******************************************************************************
#include <
rt_misc.h
>
#pragma import(__use_no_semihosting_swi)
struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
FILE __stdin;
int fputc(int ch, FILE *f)
{
ITM_SendChar(ch);
return(ch);
}
int fgetc(FILE *f)
{
char ch;
ch = '?';
return((int)ch);
}
int ferror(FILE *f)
{
/* Your implementation of ferror */
return EOF;
}
void _ttywrch(int ch)
{
ITM_SendChar(ch);
}
void _sys_exit(int return_code)
{
label: goto label; /* endless loop */
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif
For FREERTOS
__attribute__((section("HEAP"))) static unsigned char ucHeap[ configTOTAL_HEAP_SIZE ];
Подписаться на:
Сообщения (Atom)