Author Topic: Code completion and STM32 peripheral registers  (Read 338 times)

Offline 1essor1

  • Single posting newcomer
  • *
  • Posts: 4
Code completion and STM32 peripheral registers
« on: March 19, 2017, 04:19:49 pm »
Hello!

The problem is I want to registers name being autocompleted like normal fields of a struct.
For example, I write GPIOA, then -> and bang - there should be list of GPIOA regs like MODER, OTYPER and other displayed, but nothing happens.



Registers i want access are just memory regions and GPIOA is structure describing them :
Code: [Select]
typedef struct
{
  __IO uint32_t MODER;        /*!< GPIO port mode register,                                  Address offset: 0x00 */
  __IO uint16_t OTYPER;       /*!< GPIO port output type register,                           Address offset: 0x04 */
  uint16_t RESERVED0;         /*!< Reserved,                                                                 0x06 */
  __IO uint32_t OSPEEDR;      /*!< GPIO port output speed register,                          Address offset: 0x08 */
  __IO uint32_t PUPDR;        /*!< GPIO port pull-up/pull-down register,                     Address offset: 0x0C */
  __IO uint16_t IDR;          /*!< GPIO port input data register,                            Address offset: 0x10 */
  uint16_t RESERVED1;         /*!< Reserved,                                                                 0x12 */
  __IO uint16_t ODR;          /*!< GPIO port output data register,                           Address offset: 0x14 */
  uint16_t RESERVED2;         /*!< Reserved,                                                                 0x16 */
  __IO uint32_t BSRR;         /*!< GPIO port bit set/reset registerBSRR,                     Address offset: 0x18 */
  __IO uint32_t LCKR;         /*!< GPIO port configuration lock register,                    Address offset: 0x1C */
  __IO uint32_t AFR[2];       /*!< GPIO alternate function low register,                Address offset: 0x20-0x24 */
  __IO uint16_t BRR;          /*!< GPIO bit reset register,                                  Address offset: 0x28 */
  uint16_t RESERVED3;         /*!< Reserved,                                                                 0x2A */
}GPIO_TypeDef;

#define PERIPH_BASE           ((uint32_t)0x40000000) /*!< Peripheral base address in the alias region */
#define AHB2PERIPH_BASE       (PERIPH_BASE + 0x08000000)
#define GPIOA_BASE            (AHB2PERIPH_BASE + 0x00000000)
#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)

Maybe I'm doing something wrong? Or there is some settings i don't know...

Offline yvesdm3000

  • Almost regular
  • **
  • Posts: 219
Re: Code completion and STM32 peripheral registers
« Reply #1 on: March 19, 2017, 06:36:44 pm »
Where is this struct declared and is that #include 'd ?

Yves
Clang based code completion for Code::Blocks:   http://github.com/yvesdm3000/ClangLib

Offline 1essor1

  • Single posting newcomer
  • *
  • Posts: 4
Re: Code completion and STM32 peripheral registers
« Reply #2 on: March 19, 2017, 06:55:15 pm »
GPIO_TypeDef and all defines with addresses are in stm32f0xx.h. This file included to main.c where I write code for screenshots.
« Last Edit: March 19, 2017, 07:04:15 pm by 1essor1 »

Offline Quiss

  • Multiple posting newcomer
  • *
  • Posts: 32

Offline 1essor1

  • Single posting newcomer
  • *
  • Posts: 4
Re: Code completion and STM32 peripheral registers
« Reply #4 on: March 20, 2017, 09:30:42 am »
http://forums.codeblocks.org/index.php/topic,15482.0.html
Thanks for link! Yes, this situation is similar to mine.

So, there is no way to deal with this problem? Maybe some CC tweaks that help it to do macro expansion deeper? If it will take more time, it still be ok.
« Last Edit: March 20, 2017, 09:32:48 am by 1essor1 »

Offline yvesdm3000

  • Almost regular
  • **
  • Posts: 219
Re: Code completion and STM32 peripheral registers
« Reply #5 on: March 20, 2017, 02:09:42 pm »
You might try the ClangCC plugin since it's based on a real compiler, but you'll have to build clang, build the plugin and know a little bit about clang compile options since it needs compile options on its own and I don't know how compatible they are with compilation options for a cross-compiler like for STM32

Yves

Clang based code completion for Code::Blocks:   http://github.com/yvesdm3000/ClangLib

Offline 1essor1

  • Single posting newcomer
  • *
  • Posts: 4
Re: Code completion and STM32 peripheral registers
« Reply #6 on: March 20, 2017, 03:27:08 pm »
Looks interesting! I'd like to get some more information about this. Where can I find this plugin and appropriate build instructions?

Online stahta01

  • Lives here!
  • ****
  • Posts: 5649
    • My Best Post
Re: Code completion and STM32 peripheral registers
« Reply #7 on: March 20, 2017, 06:24:43 pm »
Looks interesting! I'd like to get some more information about this. Where can I find this plugin and appropriate build instructions?

https://github.com/yvesdm3000/ClangLib
http://forums.codeblocks.org/index.php/topic,20623.msg148278.html#msg148278
C Programmer working to learn more about C++ and Git.
On Windows 7 64 bit and Windows 10 32 bit.
On Debian Testing, compiling CB Trunk against wxWidgets 3.0.2.
--
When in doubt, read the CB WiKi FAQ. http://wiki.codeblocks.org

Offline BlueHazzard

  • Lives here!
  • ****
  • Posts: 1231
Re: Code completion and STM32 peripheral registers
« Reply #8 on: March 22, 2017, 08:33:23 pm »
it is quite tricky to build on windows...
Linux is izi..

Online stahta01

  • Lives here!
  • ****
  • Posts: 5649
    • My Best Post
Re: Code completion and STM32 peripheral registers
« Reply #9 on: March 22, 2017, 08:50:30 pm »
it is quite tricky to build on windows...
Linux is izi..

If anybody wants a Window build; I might try building  ClangLib based CC Plugin.
Please reply in this thread; because I will NOT do it unless I have someone willing to test the custom CB build I will have to make.
It will likely be a 7Zipped file that just needs to be extracted.
It will likely based on MSys2 based files/DLLs.

Anyone want a custom build by me?

Edit: It will be an Windows 32 bit build, also.
Edit2: It will also be using wxWidgets 3.0.2 multilib DLLs.

Tim S.
« Last Edit: March 22, 2017, 08:53:09 pm by stahta01 »
C Programmer working to learn more about C++ and Git.
On Windows 7 64 bit and Windows 10 32 bit.
On Debian Testing, compiling CB Trunk against wxWidgets 3.0.2.
--
When in doubt, read the CB WiKi FAQ. http://wiki.codeblocks.org