Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Writing Startup script for Cortex M controllers in C++

A definitive guide to developing the entire embedded C++ project for ARM Cortexm-M micro-controllers. This projects ais to provide as deep insight into the development of startup script in c++.

Project Working

This project configures SysTick timer and uses it to generate time accurate delay for blinking an LED. The onboard LED connected to pin C13 blinks every second.

Dependencies

  • make
    Make utility is required for configuring and building this project. You can install make on linux by running command:

    sudo apt install build-essential
  • gcc-arm-none-eabi toolchain
    ARM cross-platform toolchain is required to build applications for arm mcus. Toolchain can be installed by running following command:

    sudo apt install gcc-arm-none-eabi
  • openocd
    It is an Open On Circuit Debugging tool used to flash and debug arm micro controllers. You can install openocd on linux by running command:

    sudo apt install openocd -y
  • st-link
    This package is provided by STMicro-electronics for flashing the binary on the micro-controller

sudo apt install stlink
  • Cortex Debug extension
    This extension for VSCode is helpful for debugging the application on Blue Pill. The contents of registers as well as memory are visible in the context menu. Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.

    ext install marus25.cortex-debug

Project Structure

  • src directory contains all source files for the project
  • include directory contains all header files for the project

Source file description

  • stm31f1.ld - linker script for STM32F103 MCU
  • src\main.cpp - application code
  • src\startup_stm32f103.cpp - startup script in cpp
  • include\gpio.hpp - slibrary for handling gpio functions
  • system_stm32f1xx.c - clock configuration and system initialization functions
  • STM32F103.svd - contains the description of the system contained in Arm Cortex-M processor-based microcontrollers, in particular, the memory mapped registers of peripherals.

Run Locally

Running the project is super easy. Just clone, build, and flash.

Clone the project

  1. Using https

    git clone https://github.com/csrohit/stm32-startup-cpp.git
    cd stm32-startup-cpp
  2. Using ssh

    git clone git@github.com:csrohit/stm32-startup-cpp.git
    cd stm32-startup-cpp

Configuration

All the configuration required for building this project is given below.

  1. Build output directory In Makefile, output directory can be configured using variable BUILD_DIR.

  2. Binary name In Makefile, the name of binary can be configured using variable TARGET.

  3. MCU In Makefile, the target mcu can be selected by seting the following flags/variables

    • MCU_FAMILY: Specifies the family, it used to define a maco for inclusion of header files
    • LD_SCRIPT: Specifies path to linker script of the target controller
    • INSTR_SET: Specifies the instruction set to use. e.g. thumb, arm, etc
    • FLOAT_ABI: Specifies the floating point implementation
    • CPU: Specifies the processor on the MCU. e.g. cortex-m3, cortex-m4, etc

Build

Run following command in terminal to generate flashable binaries for blue pill board. Build files will be written to Build Output Directory as configured.

make all

Flash

  1. Connect STlink to PC and blue pill board using swd headers.
  2. Put blue pill board in programming mode.
  3. Run following to flash board with binary.
makeflash

Output

Onboard led connected to Pin C13 can be observed to be blinking every second.

Debug

  1. Run the following make command to build the program using debugging flags
make debug
  1. Flash the controller using following command
make flash
  1. Click in Run and Debug option in VsCode sidebar. Then launch Cortex Debug target.

Happy debugging....

About

Writing startup script for STM32 Arm Cortex M3 controllers in C language

Resources

Stars

11 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Writing Startup script for Cortex M controllers in C++

A definitive guide to developing the entire embedded C++ project for ARM Cortexm-M micro-controllers. This projects ais to provide as deep insight into the development of startup script in c++.

Project Working

This project configures SysTick timer and uses it to generate time accurate delay for blinking an LED. The onboard LED connected to pin C13 blinks every second.

Dependencies

  • make
    Make utility is required for configuring and building this project. You can install make on linux by running command:

    sudo apt install build-essential
  • gcc-arm-none-eabi toolchain
    ARM cross-platform toolchain is required to build applications for arm mcus. Toolchain can be installed by running following command:

    sudo apt install gcc-arm-none-eabi
  • openocd
    It is an Open On Circuit Debugging tool used to flash and debug arm micro controllers. You can install openocd on linux by running command:

    sudo apt install openocd -y
  • st-link
    This package is provided by STMicro-electronics for flashing the binary on the micro-controller

sudo apt install stlink
  • Cortex Debug extension
    This extension for VSCode is helpful for debugging the application on Blue Pill. The contents of registers as well as memory are visible in the context menu. Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.

    ext install marus25.cortex-debug

Project Structure

  • src directory contains all source files for the project
  • include directory contains all header files for the project

Source file description

  • stm31f1.ld - linker script for STM32F103 MCU
  • src\main.cpp - application code
  • src\startup_stm32f103.cpp - startup script in cpp
  • include\gpio.hpp - slibrary for handling gpio functions
  • system_stm32f1xx.c - clock configuration and system initialization functions
  • STM32F103.svd - contains the description of the system contained in Arm Cortex-M processor-based microcontrollers, in particular, the memory mapped registers of peripherals.

Run Locally

Running the project is super easy. Just clone, build, and flash.

Clone the project

  1. Using https

    git clone https://github.com/csrohit/stm32-startup-cpp.git
    cd stm32-startup-cpp
  2. Using ssh

    git clone git@github.com:csrohit/stm32-startup-cpp.git
    cd stm32-startup-cpp

Configuration

All the configuration required for building this project is given below.

  1. Build output directory In Makefile, output directory can be configured using variable BUILD_DIR.

  2. Binary name In Makefile, the name of binary can be configured using variable TARGET.

  3. MCU In Makefile, the target mcu can be selected by seting the following flags/variables

    • MCU_FAMILY: Specifies the family, it used to define a maco for inclusion of header files
    • LD_SCRIPT: Specifies path to linker script of the target controller
    • INSTR_SET: Specifies the instruction set to use. e.g. thumb, arm, etc
    • FLOAT_ABI: Specifies the floating point implementation
    • CPU: Specifies the processor on the MCU. e.g. cortex-m3, cortex-m4, etc

Build

Run following command in terminal to generate flashable binaries for blue pill board. Build files will be written to Build Output Directory as configured.

make all

Flash

  1. Connect STlink to PC and blue pill board using swd headers.
  2. Put blue pill board in programming mode.
  3. Run following to flash board with binary.
makeflash

Output

Onboard led connected to Pin C13 can be observed to be blinking every second.

Debug

  1. Run the following make command to build the program using debugging flags
make debug
  1. Flash the controller using following command
make flash
  1. Click in Run and Debug option in VsCode sidebar. Then launch Cortex Debug target.

Happy debugging....

About

Writing startup script for STM32 Arm Cortex M3 controllers in C language

Resources

Stars

11 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Writing Startup script for Cortex M controllers in C++

A definitive guide to developing the entire embedded C++ project for ARM Cortexm-M micro-controllers. This projects ais to provide as deep insight into the development of startup script in c++.

Project Working

This project configures SysTick timer and uses it to generate time accurate delay for blinking an LED. The onboard LED connected to pin C13 blinks every second.

Dependencies

  • make
    Make utility is required for configuring and building this project. You can install make on linux by running command:

    sudo apt install build-essential
  • gcc-arm-none-eabi toolchain
    ARM cross-platform toolchain is required to build applications for arm mcus. Toolchain can be installed by running following command:

    sudo apt install gcc-arm-none-eabi
  • openocd
    It is an Open On Circuit Debugging tool used to flash and debug arm micro controllers. You can install openocd on linux by running command:

    sudo apt install openocd -y
  • st-link
    This package is provided by STMicro-electronics for flashing the binary on the micro-controller

sudo apt install stlink
  • Cortex Debug extension
    This extension for VSCode is helpful for debugging the application on Blue Pill. The contents of registers as well as memory are visible in the context menu. Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.

    ext install marus25.cortex-debug

Project Structure

  • src directory contains all source files for the project
  • include directory contains all header files for the project

Source file description

  • stm31f1.ld - linker script for STM32F103 MCU
  • src\main.cpp - application code
  • src\startup_stm32f103.cpp - startup script in cpp
  • include\gpio.hpp - slibrary for handling gpio functions
  • system_stm32f1xx.c - clock configuration and system initialization functions
  • STM32F103.svd - contains the description of the system contained in Arm Cortex-M processor-based microcontrollers, in particular, the memory mapped registers of peripherals.

Run Locally

Running the project is super easy. Just clone, build, and flash.

Clone the project

  1. Using https

    git clone https://github.com/csrohit/stm32-startup-cpp.git
    cd stm32-startup-cpp
  2. Using ssh

    git clone git@github.com:csrohit/stm32-startup-cpp.git
    cd stm32-startup-cpp

Configuration

All the configuration required for building this project is given below.

  1. Build output directory In Makefile, output directory can be configured using variable BUILD_DIR.

  2. Binary name In Makefile, the name of binary can be configured using variable TARGET.

  3. MCU In Makefile, the target mcu can be selected by seting the following flags/variables

    • MCU_FAMILY: Specifies the family, it used to define a maco for inclusion of header files
    • LD_SCRIPT: Specifies path to linker script of the target controller
    • INSTR_SET: Specifies the instruction set to use. e.g. thumb, arm, etc
    • FLOAT_ABI: Specifies the floating point implementation
    • CPU: Specifies the processor on the MCU. e.g. cortex-m3, cortex-m4, etc

Build

Run following command in terminal to generate flashable binaries for blue pill board. Build files will be written to Build Output Directory as configured.

make all

Flash

  1. Connect STlink to PC and blue pill board using swd headers.
  2. Put blue pill board in programming mode.
  3. Run following to flash board with binary.
makeflash

Output

Onboard led connected to Pin C13 can be observed to be blinking every second.

Debug

  1. Run the following make command to build the program using debugging flags
make debug
  1. Flash the controller using following command
make flash
  1. Click in Run and Debug option in VsCode sidebar. Then launch Cortex Debug target.

Happy debugging....

About

Writing startup script for STM32 Arm Cortex M3 controllers in C language

Resources

Stars

11 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Writing Startup script for Cortex M controllers in C++

A definitive guide to developing the entire embedded C++ project for ARM Cortexm-M micro-controllers. This projects ais to provide as deep insight into the development of startup script in c++.

Project Working

This project configures SysTick timer and uses it to generate time accurate delay for blinking an LED. The onboard LED connected to pin C13 blinks every second.

Dependencies

  • make
    Make utility is required for configuring and building this project. You can install make on linux by running command:

    sudo apt install build-essential
  • gcc-arm-none-eabi toolchain
    ARM cross-platform toolchain is required to build applications for arm mcus. Toolchain can be installed by running following command:

    sudo apt install gcc-arm-none-eabi
  • openocd
    It is an Open On Circuit Debugging tool used to flash and debug arm micro controllers. You can install openocd on linux by running command:

    sudo apt install openocd -y
  • st-link
    This package is provided by STMicro-electronics for flashing the binary on the micro-controller

sudo apt install stlink
  • Cortex Debug extension
    This extension for VSCode is helpful for debugging the application on Blue Pill. The contents of registers as well as memory are visible in the context menu. Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.

    ext install marus25.cortex-debug

Project Structure

  • src directory contains all source files for the project
  • include directory contains all header files for the project

Source file description

  • stm31f1.ld - linker script for STM32F103 MCU
  • src\main.cpp - application code
  • src\startup_stm32f103.cpp - startup script in cpp
  • include\gpio.hpp - slibrary for handling gpio functions
  • system_stm32f1xx.c - clock configuration and system initialization functions
  • STM32F103.svd - contains the description of the system contained in Arm Cortex-M processor-based microcontrollers, in particular, the memory mapped registers of peripherals.

Run Locally

Running the project is super easy. Just clone, build, and flash.

Clone the project

  1. Using https

    git clone https://github.com/csrohit/stm32-startup-cpp.git
    cd stm32-startup-cpp
  2. Using ssh

    git clone git@github.com:csrohit/stm32-startup-cpp.git
    cd stm32-startup-cpp

Configuration

All the configuration required for building this project is given below.

  1. Build output directory In Makefile, output directory can be configured using variable BUILD_DIR.

  2. Binary name In Makefile, the name of binary can be configured using variable TARGET.

  3. MCU In Makefile, the target mcu can be selected by seting the following flags/variables

    • MCU_FAMILY: Specifies the family, it used to define a maco for inclusion of header files
    • LD_SCRIPT: Specifies path to linker script of the target controller
    • INSTR_SET: Specifies the instruction set to use. e.g. thumb, arm, etc
    • FLOAT_ABI: Specifies the floating point implementation
    • CPU: Specifies the processor on the MCU. e.g. cortex-m3, cortex-m4, etc

Build

Run following command in terminal to generate flashable binaries for blue pill board. Build files will be written to Build Output Directory as configured.

make all

Flash

  1. Connect STlink to PC and blue pill board using swd headers.
  2. Put blue pill board in programming mode.
  3. Run following to flash board with binary.
makeflash

Output

Onboard led connected to Pin C13 can be observed to be blinking every second.

Debug

  1. Run the following make command to build the program using debugging flags
make debug
  1. Flash the controller using following command
make flash
  1. Click in Run and Debug option in VsCode sidebar. Then launch Cortex Debug target.

Happy debugging....

About

Writing startup script for STM32 Arm Cortex M3 controllers in C language

Resources

Stars

11 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Writing Startup script for Cortex M controllers in C++

A definitive guide to developing the entire embedded C++ project for ARM Cortexm-M micro-controllers. This projects ais to provide as deep insight into the development of startup script in c++.

Project Working

This project configures SysTick timer and uses it to generate time accurate delay for blinking an LED. The onboard LED connected to pin C13 blinks every second.

Dependencies

  • make
    Make utility is required for configuring and building this project. You can install make on linux by running command:

    sudo apt install build-essential
  • gcc-arm-none-eabi toolchain
    ARM cross-platform toolchain is required to build applications for arm mcus. Toolchain can be installed by running following command:

    sudo apt install gcc-arm-none-eabi
  • openocd
    It is an Open On Circuit Debugging tool used to flash and debug arm micro controllers. You can install openocd on linux by running command:

    sudo apt install openocd -y
  • st-link
    This package is provided by STMicro-electronics for flashing the binary on the micro-controller

sudo apt install stlink
  • Cortex Debug extension
    This extension for VSCode is helpful for debugging the application on Blue Pill. The contents of registers as well as memory are visible in the context menu. Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.

    ext install marus25.cortex-debug

Project Structure

  • src directory contains all source files for the project
  • include directory contains all header files for the project

Source file description

  • stm31f1.ld - linker script for STM32F103 MCU
  • src\main.cpp - application code
  • src\startup_stm32f103.cpp - startup script in cpp
  • include\gpio.hpp - slibrary for handling gpio functions
  • system_stm32f1xx.c - clock configuration and system initialization functions
  • STM32F103.svd - contains the description of the system contained in Arm Cortex-M processor-based microcontrollers, in particular, the memory mapped registers of peripherals.

Run Locally

Running the project is super easy. Just clone, build, and flash.

Clone the project

  1. Using https

    git clone https://github.com/csrohit/stm32-startup-cpp.git
    cd stm32-startup-cpp
  2. Using ssh

    git clone git@github.com:csrohit/stm32-startup-cpp.git
    cd stm32-startup-cpp

Configuration

All the configuration required for building this project is given below.

  1. Build output directory In Makefile, output directory can be configured using variable BUILD_DIR.

  2. Binary name In Makefile, the name of binary can be configured using variable TARGET.

  3. MCU In Makefile, the target mcu can be selected by seting the following flags/variables

    • MCU_FAMILY: Specifies the family, it used to define a maco for inclusion of header files
    • LD_SCRIPT: Specifies path to linker script of the target controller
    • INSTR_SET: Specifies the instruction set to use. e.g. thumb, arm, etc
    • FLOAT_ABI: Specifies the floating point implementation
    • CPU: Specifies the processor on the MCU. e.g. cortex-m3, cortex-m4, etc

Build

Run following command in terminal to generate flashable binaries for blue pill board. Build files will be written to Build Output Directory as configured.

make all

Flash

  1. Connect STlink to PC and blue pill board using swd headers.
  2. Put blue pill board in programming mode.
  3. Run following to flash board with binary.
makeflash

Output

Onboard led connected to Pin C13 can be observed to be blinking every second.

Debug

  1. Run the following make command to build the program using debugging flags
make debug
  1. Flash the controller using following command
make flash
  1. Click in Run and Debug option in VsCode sidebar. Then launch Cortex Debug target.

Happy debugging....

About

Writing startup script for STM32 Arm Cortex M3 controllers in C language

Resources

Stars

11 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Writing Startup script for Cortex M controllers in C++

A definitive guide to developing the entire embedded C++ project for ARM Cortexm-M micro-controllers. This projects ais to provide as deep insight into the development of startup script in c++.

Project Working

This project configures SysTick timer and uses it to generate time accurate delay for blinking an LED. The onboard LED connected to pin C13 blinks every second.

Dependencies

  • make
    Make utility is required for configuring and building this project. You can install make on linux by running command:

    sudo apt install build-essential
  • gcc-arm-none-eabi toolchain
    ARM cross-platform toolchain is required to build applications for arm mcus. Toolchain can be installed by running following command:

    sudo apt install gcc-arm-none-eabi
  • openocd
    It is an Open On Circuit Debugging tool used to flash and debug arm micro controllers. You can install openocd on linux by running command:

    sudo apt install openocd -y
  • st-link
    This package is provided by STMicro-electronics for flashing the binary on the micro-controller

sudo apt install stlink
  • Cortex Debug extension
    This extension for VSCode is helpful for debugging the application on Blue Pill. The contents of registers as well as memory are visible in the context menu. Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.

    ext install marus25.cortex-debug

Project Structure

  • src directory contains all source files for the project
  • include directory contains all header files for the project

Source file description

  • stm31f1.ld - linker script for STM32F103 MCU
  • src\main.cpp - application code
  • src\startup_stm32f103.cpp - startup script in cpp
  • include\gpio.hpp - slibrary for handling gpio functions
  • system_stm32f1xx.c - clock configuration and system initialization functions
  • STM32F103.svd - contains the description of the system contained in Arm Cortex-M processor-based microcontrollers, in particular, the memory mapped registers of peripherals.

Run Locally

Running the project is super easy. Just clone, build, and flash.

Clone the project

  1. Using https

    git clone https://github.com/csrohit/stm32-startup-cpp.git
    cd stm32-startup-cpp
  2. Using ssh

    git clone git@github.com:csrohit/stm32-startup-cpp.git
    cd stm32-startup-cpp

Configuration

All the configuration required for building this project is given below.

  1. Build output directory In Makefile, output directory can be configured using variable BUILD_DIR.

  2. Binary name In Makefile, the name of binary can be configured using variable TARGET.

  3. MCU In Makefile, the target mcu can be selected by seting the following flags/variables

    • MCU_FAMILY: Specifies the family, it used to define a maco for inclusion of header files
    • LD_SCRIPT: Specifies path to linker script of the target controller
    • INSTR_SET: Specifies the instruction set to use. e.g. thumb, arm, etc
    • FLOAT_ABI: Specifies the floating point implementation
    • CPU: Specifies the processor on the MCU. e.g. cortex-m3, cortex-m4, etc

Build

Run following command in terminal to generate flashable binaries for blue pill board. Build files will be written to Build Output Directory as configured.

make all

Flash

  1. Connect STlink to PC and blue pill board using swd headers.
  2. Put blue pill board in programming mode.
  3. Run following to flash board with binary.
makeflash

Output

Onboard led connected to Pin C13 can be observed to be blinking every second.

Debug

  1. Run the following make command to build the program using debugging flags
make debug
  1. Flash the controller using following command
make flash
  1. Click in Run and Debug option in VsCode sidebar. Then launch Cortex Debug target.

Happy debugging....

About

Writing startup script for STM32 Arm Cortex M3 controllers in C language

Resources

Stars

11 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Writing Startup script for Cortex M controllers in C++

A definitive guide to developing the entire embedded C++ project for ARM Cortexm-M micro-controllers. This projects ais to provide as deep insight into the development of startup script in c++.

Project Working

This project configures SysTick timer and uses it to generate time accurate delay for blinking an LED. The onboard LED connected to pin C13 blinks every second.

Dependencies

  • make
    Make utility is required for configuring and building this project. You can install make on linux by running command:

    sudo apt install build-essential
  • gcc-arm-none-eabi toolchain
    ARM cross-platform toolchain is required to build applications for arm mcus. Toolchain can be installed by running following command:

    sudo apt install gcc-arm-none-eabi
  • openocd
    It is an Open On Circuit Debugging tool used to flash and debug arm micro controllers. You can install openocd on linux by running command:

    sudo apt install openocd -y
  • st-link
    This package is provided by STMicro-electronics for flashing the binary on the micro-controller

sudo apt install stlink
  • Cortex Debug extension
    This extension for VSCode is helpful for debugging the application on Blue Pill. The contents of registers as well as memory are visible in the context menu. Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.

    ext install marus25.cortex-debug

Project Structure

  • src directory contains all source files for the project
  • include directory contains all header files for the project

Source file description

  • stm31f1.ld - linker script for STM32F103 MCU
  • src\main.cpp - application code
  • src\startup_stm32f103.cpp - startup script in cpp
  • include\gpio.hpp - slibrary for handling gpio functions
  • system_stm32f1xx.c - clock configuration and system initialization functions
  • STM32F103.svd - contains the description of the system contained in Arm Cortex-M processor-based microcontrollers, in particular, the memory mapped registers of peripherals.

Run Locally

Running the project is super easy. Just clone, build, and flash.

Clone the project

  1. Using https

    git clone https://github.com/csrohit/stm32-startup-cpp.git
    cd stm32-startup-cpp
  2. Using ssh

    git clone git@github.com:csrohit/stm32-startup-cpp.git
    cd stm32-startup-cpp

Configuration

All the configuration required for building this project is given below.

  1. Build output directory In Makefile, output directory can be configured using variable BUILD_DIR.

  2. Binary name In Makefile, the name of binary can be configured using variable TARGET.

  3. MCU In Makefile, the target mcu can be selected by seting the following flags/variables

    • MCU_FAMILY: Specifies the family, it used to define a maco for inclusion of header files
    • LD_SCRIPT: Specifies path to linker script of the target controller
    • INSTR_SET: Specifies the instruction set to use. e.g. thumb, arm, etc
    • FLOAT_ABI: Specifies the floating point implementation
    • CPU: Specifies the processor on the MCU. e.g. cortex-m3, cortex-m4, etc

Build

Run following command in terminal to generate flashable binaries for blue pill board. Build files will be written to Build Output Directory as configured.

make all

Flash

  1. Connect STlink to PC and blue pill board using swd headers.
  2. Put blue pill board in programming mode.
  3. Run following to flash board with binary.
makeflash

Output

Onboard led connected to Pin C13 can be observed to be blinking every second.

Debug

  1. Run the following make command to build the program using debugging flags
make debug
  1. Flash the controller using following command
make flash
  1. Click in Run and Debug option in VsCode sidebar. Then launch Cortex Debug target.

Happy debugging....

About

Writing startup script for STM32 Arm Cortex M3 controllers in C language

Resources

Stars

11 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Writing Startup script for Cortex M controllers in C++

A definitive guide to developing the entire embedded C++ project for ARM Cortexm-M micro-controllers. This projects ais to provide as deep insight into the development of startup script in c++.

Project Working

This project configures SysTick timer and uses it to generate time accurate delay for blinking an LED. The onboard LED connected to pin C13 blinks every second.

Dependencies

  • make
    Make utility is required for configuring and building this project. You can install make on linux by running command:

    sudo apt install build-essential
  • gcc-arm-none-eabi toolchain
    ARM cross-platform toolchain is required to build applications for arm mcus. Toolchain can be installed by running following command:

    sudo apt install gcc-arm-none-eabi
  • openocd
    It is an Open On Circuit Debugging tool used to flash and debug arm micro controllers. You can install openocd on linux by running command:

    sudo apt install openocd -y
  • st-link
    This package is provided by STMicro-electronics for flashing the binary on the micro-controller

sudo apt install stlink
  • Cortex Debug extension
    This extension for VSCode is helpful for debugging the application on Blue Pill. The contents of registers as well as memory are visible in the context menu. Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.

    ext install marus25.cortex-debug

Project Structure

  • src directory contains all source files for the project
  • include directory contains all header files for the project

Source file description

  • stm31f1.ld - linker script for STM32F103 MCU
  • src\main.cpp - application code
  • src\startup_stm32f103.cpp - startup script in cpp
  • include\gpio.hpp - slibrary for handling gpio functions
  • system_stm32f1xx.c - clock configuration and system initialization functions
  • STM32F103.svd - contains the description of the system contained in Arm Cortex-M processor-based microcontrollers, in particular, the memory mapped registers of peripherals.

Run Locally

Running the project is super easy. Just clone, build, and flash.

Clone the project

  1. Using https

    git clone https://github.com/csrohit/stm32-startup-cpp.git
    cd stm32-startup-cpp
  2. Using ssh

    git clone git@github.com:csrohit/stm32-startup-cpp.git
    cd stm32-startup-cpp

Configuration

All the configuration required for building this project is given below.

  1. Build output directory In Makefile, output directory can be configured using variable BUILD_DIR.

  2. Binary name In Makefile, the name of binary can be configured using variable TARGET.

  3. MCU In Makefile, the target mcu can be selected by seting the following flags/variables

    • MCU_FAMILY: Specifies the family, it used to define a maco for inclusion of header files
    • LD_SCRIPT: Specifies path to linker script of the target controller
    • INSTR_SET: Specifies the instruction set to use. e.g. thumb, arm, etc
    • FLOAT_ABI: Specifies the floating point implementation
    • CPU: Specifies the processor on the MCU. e.g. cortex-m3, cortex-m4, etc

Build

Run following command in terminal to generate flashable binaries for blue pill board. Build files will be written to Build Output Directory as configured.

make all

Flash

  1. Connect STlink to PC and blue pill board using swd headers.
  2. Put blue pill board in programming mode.
  3. Run following to flash board with binary.
makeflash

Output

Onboard led connected to Pin C13 can be observed to be blinking every second.

Debug

  1. Run the following make command to build the program using debugging flags
make debug
  1. Flash the controller using following command
make flash
  1. Click in Run and Debug option in VsCode sidebar. Then launch Cortex Debug target.

Happy debugging....

About

Writing startup script for STM32 Arm Cortex M3 controllers in C language

Resources

Stars

11 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages