<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.element14.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Embedded and Microcontrollers</title><link>https://community.element14.com/technologies/embedded/</link><description>Embedded systems programming, design and products; also microcontrollers, programmable logic, memory, DSP and controllers. </description><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>File: I Am Legend News Scene</title><link>https://community.element14.com/technologies/embedded/m/managed-videos/151820</link><pubDate>Tue, 22 Sep 2026 17:03:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:3680a495-9643-479d-95ab-e65bfcc04ee9</guid><dc:creator>shabaz</dc:creator><description>Here&amp;#39;s the movie: https://amzn.to/2O2EU3M Opening scene (news scene) from I Am Legend. Please note that I may be paid from links in this content.</description><category domain="https://community.element14.com/technologies/embedded/tags/flu%2bvaccine">flu vaccine</category><category domain="https://community.element14.com/technologies/embedded/tags/flu">flu</category><category domain="https://community.element14.com/technologies/embedded/tags/vaccine">vaccine</category><category domain="https://community.element14.com/technologies/embedded/tags/I%2bAm%2bLegend%2b_2800_Film_2900_">I Am Legend (Film)</category><category domain="https://community.element14.com/technologies/embedded/tags/coronavirus%2bvaccine">coronavirus vaccine</category><category domain="https://community.element14.com/technologies/embedded/tags/coronavirus">coronavirus</category><category domain="https://community.element14.com/technologies/embedded/tags/corona%2bvirus">corona virus</category></item><item><title /><link>https://community.element14.com/technologies/embedded/b/blog/posts/connecting-ai-to-the-physical-world-with-mcp-and-a-pi-pico-w?CommentId=9e661866-3e71-4a2b-9792-7597f5342abe</link><pubDate>Tue, 22 Sep 2026 16:53:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:9e661866-3e71-4a2b-9792-7597f5342abe</guid><dc:creator>shabaz</dc:creator><description>I was watching the recent Jensen Huang CBS interview the other day, the interviewer pressed him several times regarding AI dangers but he was comfortably reassuring. It reminded me we are now at the Emma Thompson scene in I Am Legend; the point that was reached when she modestly agrees she has cured cancer : ) youtu.be/B3xY6Ffy_wE</description></item><item><title /><link>https://community.element14.com/technologies/embedded/b/blog/posts/connecting-ai-to-the-physical-world-with-mcp-and-a-pi-pico-w?CommentId=4bc78c40-db71-4159-94bd-f52e475d9df1</link><pubDate>Tue, 22 Sep 2026 08:22:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:4bc78c40-db71-4159-94bd-f52e475d9df1</guid><dc:creator>BigG</dc:creator><description>Wow! Awesome work. This is a great use case.</description></item><item><title /><link>https://community.element14.com/technologies/embedded/b/blog/posts/connecting-ai-to-the-physical-world-with-mcp-and-a-pi-pico-w?CommentId=9292280b-3c36-41bd-8cb8-691c07a964f3</link><pubDate>Tue, 22 Sep 2026 08:21:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:9292280b-3c36-41bd-8cb8-691c07a964f3</guid><dc:creator>Fred27</dc:creator><description>&amp;quot;Connecting AI to the Physical World&amp;quot; Don&amp;#39;t do it! It won&amp;#39;t end well. Haven&amp;#39;t you seen Terminator?</description></item><item><title>Blog Post: Connecting AI to the Physical World with MCP and a Pi Pico W</title><link>https://community.element14.com/technologies/embedded/b/blog/posts/connecting-ai-to-the-physical-world-with-mcp-and-a-pi-pico-w</link><pubDate>Tue, 22 Sep 2026 05:39:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:d8e38409-8320-48c7-93ae-28348010f8cc</guid><dc:creator>shabaz</dc:creator><description>Table of Contents Introduction MCP Explained Working with MCP Using a Simple MCP Server Library Building and Running the Code Connecting the Agent Summary Introduction AI agents can be extremely useful, but it would often be helpful if they could directly interact with the physical world. For instance, one might develop a control system, and then get the AI to fine-tune it automatically, by adjusting outputs and taking measurements. You could connect an oscilloscope to the AI, and let it take measurements, modify controls, and inspect the ‘scope screenshots. There’s a fairly crude but useful thing called Master Control Program Model Context Protocol (MCP) which many AI agents can work with, if the user provides functionality in a server that listens and responds to MCP. There are ready-made MCP servers for a load of useful scenarios. I decided to implement one in a microcontroller (Pi Pico W). MCP Explained MCP is ridiculously simple in theory. The AI agent (which acts as the client) can be configured with the server details (such as IP address), and then on startup, the agent will send a server/discover message to learn what categories of things the server supports. The server responds back with “capabilities” which are essentially “tools” and “resources”. Next, the client asks for a list of tools and the server provides that in a response. An example tool could be as simple as a relay. The client then asks for a list of resources - a sensor could be a resource. Later, when the agent wishes to activate a tool (a relay in this example) the agent (client) will send a “tools/call” message with the required relay state, and the server responds accordingly. If the agent was curious to know the resource value (such as temperature) then it will send a “resources/read” message for the server to respond to. That’s it pretty much. The secret to why this works as well as it can, is that the responses to the tools and resources list requests contain verbose descriptions about what the tools and resources are about. It gives the agent useful information it can stick in its context, and include that when making decisions. There are a few more MCP messages not mentioned here (there&amp;#39;s a ping-pong diagram of real network traffic later), but the important ones are covered. As far as the MCP server creator is concerned, they need to be creative in describing their sensors and actuators in a description field which will get populated in the list responses, and then attach their GPIO or whatever to their server callbacks for when the appropriate messages come across from the AI. That is it, and let’s believe everything is perfectly fine; none of this is crude and half-baked. I’m sure there are some business opportunities in this area; surely someone must be working on some sort of gateway, to enforce some rules so that real-world equipment isn’t destroyed when the machines take over. In the meantime, that’s all on the MCP server implementor. Working with MCP The best way to work with MCP is to find an MCP library for the programming language you’re comfortable with, and then the majority of the hard work is done for you, it’s just a matter of integration. In my case, I wanted to use a small microcontroller with WiFi capability, and there isn’t a suitable library for that. With some experimentation, it was found that plain HTTP can work. The MCP client (agent) sends a HTTP POST request to the MCP server (microcontroller), and the server returns a response containing JSON content, and closes the connection. The agent simply opens another connection for the next request. This is very convenient on a small embedded system because the server doesn&amp;#39;t need to maintain a persistent connection. I have only tested this implementation with Antigravity, so other MCP clients may behave differently.I am sure someone will eventually come up with a more robust MCP server library for microcontrollers, but for now at least something works. Using a Simple MCP Server Library I placed code in a pico_w_mcp repository , which can be easily used with a Pi Pico W, which has 2.4 GHz WiFi built-in. The code is in just one source file mcp_server.cpp, and it has a header file of course. Here’s how to use the server in custom projects. First, create an object of class MCPServer (the name you pass it here might need to be the name you later register with the agent too): MCPServer mcp(“pico_w_mcp”); Then, define some callbacks for all the tools and resources (i.e. actuators and sensors). A tool callback (setMotorPWM in this example below) receives arguments supplied by the agent and performs an action. A resource callback such as readHumidity simply supplies the requested data: static bool setMotorPWM(MCPArgs &amp;amp;args, char *out, size_t out_size, void *) { float pwm = args.getFloat(&amp;quot;pwm&amp;quot;); set_motor_pwm(pwm); snprintf(out, out_size, &amp;quot;Motor PWM set to %.1f%%&amp;quot;, pwm); return true; } static bool readHumidity(char *out, size_t out_size, void *) { // assume value is in float humidity snprintf(out, out_size, &amp;quot;%.1f percent&amp;quot;, humidity); return true; } Then, register all the tool callbacks: MCPServer::MCPTool motor = mcp.tool( &amp;quot;set_motor_pwm&amp;quot;, &amp;quot;Set the motor PWM duty cycle from 0.0 to 100.0 percent.&amp;quot;, setMotorPWM); motor.param ( &amp;quot;pwm&amp;quot;, &amp;quot;PWM duty cycle in percent, from 0.0 to 100.0.&amp;quot; ); And register all the resource callbacks: mcp.resource(&amp;quot;sensor://humidity&amp;quot;, &amp;quot;humidity&amp;quot;, &amp;quot;Current relative humidity in percent.&amp;quot;, readHumidity ); Then, start up the MCP server! mcp.begin(8000); Building and Running the Code The repository has a complete demo project, and to use it, the Pi Pico C/C++ SDK needs to be installed. Follow the build instructions in the SDK documentation. In my case, I use a PowerShell script (it is in the GitHub repo) although if anyone wants to use that, it will need to be edited since it has hard-coded paths to suit my set-up. For the demo project, the WLAN SSID and password either need to be typed into the main.cpp code, or provided as parameters during the build process. It’s just a demo, you wouldn’t do this for a real project of course. Once the code is built, the firmware is transferred to the Pi Pico W in the usual way (hold down the BOOTSEL button on the Pi Pico W and insert the USB cable, then release the button, then drag the firmware file onto the drive letter that appears on the PC, and then the firmware will upload and immediately begin running). A serial port will appear on the PC, which can provide debug information if required. You can check your network tools to see what IP address the Pi Pico W got assigned from the router. Connecting the Agent Consult the documentation for the system you’re using. With Antigravity CLI, all that needs to be done is to type the following in a Linux shell or Windows PowerShell (change the IP address to match the Pi Pico, and notice that the pico_w_mcp name that was used in the source code is used; I’m not sure if that is essential, but it’s what I did): agy mcp add --type http pico_w_mcp http://192.168.1.159:8000/mcp Next, run Antigravity, and try typing in something that needs interaction with the MCP server. If you’re curious, run WireShark at the same time. The diagram here shows the interaction I saw on my PC (click to enlarge). Here&amp;#39;s what the serial console revealed from the Pi Pico point of view: Summary A simple HTTP server can provide enough MCP functionality to allow an embedded device to interact directly with an AI agent. A simple demo was illustrated using a Pi Pico and a cut-down minimal MCP server implementation mainly just to get the idea of how to use the protocol, and if you’re using a more powerful device, then it would certainly be better to use an established MCP server library. I can’t guarantee the simple library described here will work for you, but if you ever give it a try I’d be interested to hear how it goes. Thanks for reading.</description><category domain="https://community.element14.com/technologies/embedded/tags/Model%2bContext%2bProtocol">Model Context Protocol</category><category domain="https://community.element14.com/technologies/embedded/tags/rpiintermediate">rpiintermediate</category><category domain="https://community.element14.com/technologies/embedded/tags/mcp">mcp</category><category domain="https://community.element14.com/technologies/embedded/tags/Gemini">Gemini</category><category domain="https://community.element14.com/technologies/embedded/tags/antigravity">antigravity</category><category domain="https://community.element14.com/technologies/embedded/tags/raspberry_5F00_pi_5F00_projects">raspberry_pi_projects</category><category domain="https://community.element14.com/technologies/embedded/tags/pi%2bpico">pi pico</category></item><item><title /><link>https://community.element14.com/technologies/embedded/b/blog/posts/mspm0-project-with-vs-code-cmake-and-gcc---part-7-middleware-example-stepper-motor-control?CommentId=779308a6-3aaa-488c-9ecf-127e55362d81</link><pubDate>Sat, 19 Sep 2026 18:57:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:779308a6-3aaa-488c-9ecf-127e55362d81</guid><dc:creator>DAB</dc:creator><description>Another nice update Jan. It is too bad they do not have these tools for the older MSP430.</description></item><item><title /><link>https://community.element14.com/technologies/embedded/b/blog/posts/mspm0-project-with-vs-code-cmake-and-gcc---part-7-middleware-example-stepper-motor-control?CommentId=99c0597c-f3df-4751-abcb-40badffbb88f</link><pubDate>Sat, 19 Sep 2026 15:32:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:99c0597c-f3df-4751-abcb-40badffbb88f</guid><dc:creator>Qbit</dc:creator><description>Nice update on the series! Great write up on the cmake setup and VS Code project files.</description></item><item><title /><link>https://community.element14.com/technologies/embedded/b/blog/posts/mspm0-project-with-vs-code-cmake-and-gcc---part-7-middleware-example-stepper-motor-control?CommentId=a0c421a2-9e55-4742-ae44-2045154e4534</link><pubDate>Sat, 19 Sep 2026 15:05:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:a0c421a2-9e55-4742-ae44-2045154e4534</guid><dc:creator>Jan Cumps</dc:creator><description>I learned that the conversation between GUI and firmware is over debug protocol, not via UART. The GUI knows firmware variable addresses (by inspecting hte binary). And uses the debug instructions to directly set and read those variables. So there is no UART to reuse as interface. I tested the VS Code generated firmware by doing the same as TI. Change variable values in a debug session. That works, and I now know how to start from this code and build my own.</description></item><item><title>Blog Post: MSPM0 project with VS Code, CMake and GCC - part 7a: middleware example stepper motor control</title><link>https://community.element14.com/technologies/embedded/b/blog/posts/mspm0-project-with-vs-code-cmake-and-gcc---part-7-middleware-example-stepper-motor-control</link><pubDate>Sat, 19 Sep 2026 09:12:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:e9e2ca2c-8582-462e-b956-52369a253fe9</guid><dc:creator>Jan Cumps</dc:creator><description>In this blog series, I build a Texas Instruments MSPM0 example with VS Code as IDE, and CMake as build infrastructure. In the next series of posts, I try to create a stepper motor project. It will be based on TI&amp;#39;s stepper motor middleware. TI has examples for several stepper motor drivers that I don&amp;#39;t have. Those examples have firmware for the MSPM0, and a GUI to configure and test motors. They are a good starting point that I can adapt for the stepper drivers that I own. The first attempt is to get that existing stepper middleware project going: drv8889-q1evm-gui-firmware . I will try to complete these 3 activities: run the example from TI&amp;#39;s GUI Composer. compile MSPM0 firmware on CCS port the project to VS Code, where I&amp;#39;ll do the development GUI Composer example TI&amp;#39;s Gallery has the example that I want to start from: MSPM0L-DRV8889Q1-EVM-GUI . When you click the tile, it will open GUI Composer. From there you can run the GUI. First, plug in the the MSPM0L1306 LaunchPad. Then run the GUI. It will connect to the LaunchPad, and load the firmware. You can then configure the driver, and make the motor spin or step. Because I don&amp;#39;t have the right hardware for this example, I tested it by probing the step pin output with an oscilloscope. It works. Compile example firmware with CCS I used Code Composer Studio to download and inspect TI&amp;#39;s firmware project. The project is available in Resource Explorer. You can import it from there. I first compiled and loaded the project. That worked perfectly. Then I inspected sources and project settings, to understand how the project is set up: most peripheral config is done via SysConfig it uses the middleware HAL and stepper driver drv8889-q1. They are copied from the MSPM0 SDK. the main function runs a GUI style loop. custom GUI code reacts on messages coming from the GUI Composer application, over UART using JTAG and direct variable binding between GUI and firmware. driverlib and IQMath libraries are used Port to VS Code I started from MSPM0 project with VS Code, CMake and GCC - part 6: empty &amp;quot;template&amp;quot; project , and reused these files from the CCS project: main GUI code sysconfig I didn&amp;#39;t copy over the module files. I adapted the CMake script, to find and include them in their SDK location during build. In the original sysconfig file, project generation was disabled. TI does that in several of their examples, because they use other tools to prepare example projects. I re-enabled that. Then I changed the setup, so that sysconfig generates the instructions to include the correct two libraries. All worked fine. The VS Code project is attached. In a next step, I&amp;#39;ll try to make a testbed that sends commands to the UART, just like the GUI does. Then test if I can make it generate the STEP and DIR signals. The ideal starting point for adaption to a different stepper motor IC. VS Code project: community.element14.com/.../mspm0_5F00_stepper_5F00_20260919.zip (check this post for the expected VS Code workspace settings: MSPM0 project with VS Code, CMake and GCC - part 6: empty &amp;quot;template&amp;quot; project ) part of the EasyL1105 series. all posts</description><category domain="https://community.element14.com/technologies/embedded/tags/MSPM0">MSPM0</category><category domain="https://community.element14.com/technologies/embedded/tags/easyL1105">easyL1105</category><category domain="https://community.element14.com/technologies/embedded/tags/MSPM0L1306">MSPM0L1306</category></item><item><title /><link>https://community.element14.com/technologies/embedded/b/blog/posts/pwm-example-for-the-easyl1105-mspm0-board?CommentId=0aba9789-d4d7-48d2-afb1-42daf8b39657</link><pubDate>Thu, 17 Sep 2026 16:42:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:0aba9789-d4d7-48d2-afb1-42daf8b39657</guid><dc:creator>Jan Cumps</dc:creator><description>I&amp;#39;m starting development of a stepper motor project. TI has a library for that. Unfortunately, the API documentation link, both in the offline, and downladed Resource Explorer, are not pointing to the correct resource. Online: 404 error, offline: doxygen generated empty documentation. Google&amp;#39;s AI to the rescue: it found a working version: https://software-dl.ti.com/msp430/esd/MSPM0-SDK/2_00_01_00/docs/chinese/middleware/motor_control_stepper/doxygen/api_guide/html/index.html (it also put a rant: That is a known, frustrating issue with certain releases of the MSPM0 SDK . TI sometimes packages the Doxygen folder structure with the raw HTML/CSS framework, but misses embedding the actual compiled C-source documentation or links them to an empty index file. )</description></item><item><title /><link>https://community.element14.com/technologies/embedded/b/blog/posts/mspm0-interrupt-messaging-system?CommentId=e5139efe-9a6e-4aa4-9c37-d553d6225ce2</link><pubDate>Mon, 14 Sep 2026 23:45:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:e5139efe-9a6e-4aa4-9c37-d553d6225ce2</guid><dc:creator>shabaz</dc:creator><description>All hardware I believe (i.e. code is only needed to configure the registers for assigning what entity publishes and what subscribes).</description></item><item><title /><link>https://community.element14.com/technologies/embedded/b/blog/posts/mspm0-interrupt-messaging-system?CommentId=3a12638e-e0e7-47ad-825f-74407d80c662</link><pubDate>Mon, 14 Sep 2026 20:11:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:3a12638e-e0e7-47ad-825f-74407d80c662</guid><dc:creator>Jan Cumps</dc:creator><description>I still have to figure out if it&amp;#39;s all in the peripheral fabric, or mixed with SDK code...</description></item><item><title /><link>https://community.element14.com/technologies/embedded/b/blog/posts/mspm0-interrupt-messaging-system?CommentId=e11331e4-5aef-493f-9348-515c0ca244b8</link><pubDate>Mon, 14 Sep 2026 09:26:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:e11331e4-5aef-493f-9348-515c0ca244b8</guid><dc:creator>Jan Cumps</dc:creator><description>a few useful examples that TI released in their SDK: timer notifies ADC UART notifies DMA COMPARATOR notifies timer</description></item><item><title /><link>https://community.element14.com/technologies/embedded/b/blog/posts/mspm0-interrupt-messaging-system?CommentId=9449e98c-bf47-40d4-94cf-d91303491f30</link><pubDate>Mon, 14 Sep 2026 08:55:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:9449e98c-bf47-40d4-94cf-d91303491f30</guid><dc:creator>BigG</dc:creator><description>Oh wow, that&amp;#39;s interesting. In event driven architectures this makes like so much easier. I&amp;#39;m fully into Zephyr RTOS at the moment and they have something similar, or at least I think it&amp;#39;s similar, called zbus: docs.zephyrproject.org/.../index.html</description></item><item><title /><link>https://community.element14.com/technologies/embedded/w/quiz/72058/how-well-do-you-know-microchip-s-curiosity-nano-development-platform-try-the-quiz?CommentId=83d444a0-57cd-437d-a363-39e74e3e9909</link><pubDate>Mon, 14 Sep 2026 06:10:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:83d444a0-57cd-437d-a363-39e74e3e9909</guid><dc:creator>rahuljeyaraj</dc:creator><description>Nice quiz — learned a few new things about the Curiosity Nano boards.</description></item><item><title /><link>https://community.element14.com/technologies/embedded/b/blog/posts/mspm0-interrupt-messaging-system?CommentId=03f6503f-1381-4c52-a84a-8bd13ee09893</link><pubDate>Sun, 13 Sep 2026 23:14:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:03f6503f-1381-4c52-a84a-8bd13ee09893</guid><dc:creator>shabaz</dc:creator><description>Very interesting.. not too often one sees microcontroller projects that can do all the work in the hardware message-passing and nothing needed in the main code : )</description></item><item><title>Blog Post: MSPM0 interrupt messaging system</title><link>https://community.element14.com/technologies/embedded/b/blog/posts/mspm0-interrupt-messaging-system</link><pubDate>Sun, 13 Sep 2026 12:48:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:d274f3ce-7746-489b-9e5e-83ecd6825df7</guid><dc:creator>Jan Cumps</dc:creator><description>You can handle MSPM0 interrupts via the traditional service request handler. But it also has a messaging system. With message handlers, you can route notifications from one peripheral to another. In this example: react on a button click and toggle a LED. With the EasyL1105 kit. This is TI&amp;#39;s event_input_triggers_output example. SysConfig adapted to EasyL1105. What does the project do? When you press or release the user button, an trigger is generated. It&amp;#39;s set up to send an event message. The led pin is set up to toggle when it receives an event result is that the led chan ges state when you push or release the user button. A manual blinky All of this is configuration. There is no logic related to this on the C source. image: excerpt from TI MSPM0 EVENT module introduction Resources used: LED 1 PA27 USER BUTTON PA16 Event channel 1 Resources not used: TI&amp;#39;s project uses the clock tree. I&amp;#39;ve switched it off and use the default clock. image source: EasyL1105 GitHub project Button configuration LED configuration check Event You don&amp;#39;t have to set anything here. It&amp;#39;s a result of configuring the button and LED GPIOs. main The code just sets the controller in a low power mode that allows execution of interrupts. All our logic is managed by the setup we just did. #include &amp;quot;ti_msp_dl_config.h&amp;quot; int main(void) { SYSCFG_DL_init(); /* Calling WFI after calling DL_SYSCTL_enableSleepOnExit will result in * only ISR code to be executed. This is done to showcase the device&amp;#39;s * low power consumption when sleeping. */ DL_SYSCTL_enableSleepOnExit(); while (1) { __WFI(); } } I designed this in VS Code, starting from the template project MSPM0 project with VS Code, CMake and GCC - part 6: empty &amp;quot;template&amp;quot; project . That VS Code project is attached. If you use Code Composer Studio, you can create the project from the New Project wizard. Both choices will work the same. Thank you for reading. VS Code project for EasyL1105: community.element14.com/.../EasyL1105_5F00_event_5F00_input_5F00_triggers_5F00_output.zip part of the EasyL1105 series. all posts</description><category domain="https://community.element14.com/technologies/embedded/tags/MSPM0L1105">MSPM0L1105</category><category domain="https://community.element14.com/technologies/embedded/tags/MSPM0">MSPM0</category><category domain="https://community.element14.com/technologies/embedded/tags/easyL1105">easyL1105</category><category domain="https://community.element14.com/technologies/embedded/tags/VS%2bCode">VS Code</category><category domain="https://community.element14.com/technologies/embedded/tags/vscode">vscode</category></item><item><title /><link>https://community.element14.com/technologies/embedded/b/blog/posts/mspm0-project-with-vs-code-cmake-and-gcc---part-6-empty-template-project?CommentId=6594e4ac-8228-4a62-9553-fd49caa3d8db</link><pubDate>Sun, 13 Sep 2026 06:53:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:6594e4ac-8228-4a62-9553-fd49caa3d8db</guid><dc:creator>Qbit</dc:creator><description>Great write-up and template project! It makes jumping straight into development much easier without fighting toolchain setups. That generator expression fix for GCC 15 was a great catch too, syntax like that can be tricky to search for manually, so using AI to solve it definitely saved a solid chunk of debugging time.</description></item><item><title /><link>https://community.element14.com/technologies/embedded/b/blog/posts/mspm0-project-with-vs-code-cmake-and-gcc---part-6-empty-template-project?CommentId=ea8c18b4-a9e4-4e14-80db-6f8c2a17d63d</link><pubDate>Sat, 12 Sep 2026 17:16:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:ea8c18b4-a9e4-4e14-80db-6f8c2a17d63d</guid><dc:creator>Jan Cumps</dc:creator><description>A bit of AI help. The SDK uses a construct that throws a lot of warnings in GCC 15. Because I&amp;#39;m not changing the SDK source, I tried to suppress it with: target_compile_options ( ${ CMAKE_PROJECT_NAME } PRIVATE -Wno-volatile ) I got 1 remaining warning: command-line option &amp;#39;-Wno-volatile&amp;#39; is valid for C++/ObjC++ but not for C Here&amp;#39;s Google&amp;#39;s AI reply. It solved it. Question: command-line option &amp;#39;-Wno-volatile&amp;#39; is valid for C++/ObjC++ but not for C Answer: This warning or error occurs because the compiler flag -Wno-volatile is being passed to the C compiler (like gcc), but this specific flag only exists for the C++ compiler (like g++). This usually happens when the flag is added to a global variable (such as CFLAGS or a shared build_flags configuration), forcing it onto all source files regardless of language. How to Fix It You need to ensure this flag is only passed to C++ compilations . Here is how to fix it depending on your build tool: 1. In CMake Instead of using a global compiler definition, restrict the flag using a language-specific generator expression with target_compile_options: cmake target_compile_options (your_target_name PRIVATE $ :-Wno-volatile&amp;gt; )</description></item><item><title>Blog Post: MSPM0 project with VS Code, CMake and GCC - part 6: empty "template" project</title><link>https://community.element14.com/technologies/embedded/b/blog/posts/mspm0-project-with-vs-code-cmake-and-gcc---part-6-empty-template-project</link><pubDate>Sat, 12 Sep 2026 14:32:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:5f7b062e-d4a7-4507-920e-7335f22f1c09</guid><dc:creator>Jan Cumps</dc:creator><description>In this blog series, I build a Texas Instruments MSPM0 example with VS Code as IDE, and CMake as build infrastructure. In the previous posts, I created an end to end flow, from install over build to debug, tested on LaunchPad and EasyL1105 kit. In post 6, I try to make an easy start point. An empty project, and the steps to adapt it for your project. The previous posts tackled a few aspects at a time. And following them from start to end gives you a working project. This one is single shot: minimal steps, starting from a preconfigured template project. This blog assumes that you have (see previous posts for detailed instructions): GCC cross compiler for arm (arm-none-eabi), V14.2 or higher. CMake 3.29 or higher Ninja v1.13.1 or higher. TI SysConfig mspm0 SDK 2.11 or higher Microsoft CMake Tookit for VS Code extension TI Embedded Development For VS Code TI Cortex-Debug: Device Support Pack - Texas Instruments MSPM0 (can be installed form TI Embedded Development) TI Embedded Debug for VS Code (can be installed form TI Embedded Development) If you have a lower version of some components, you can try if it works. You may have to make some changes in that case. It also assumes that you have these entries in your workspace settings (see previous posts for detailed instructions): , &amp;quot;settings&amp;quot;: { &amp;quot;cmake.cmakePath&amp;quot;: &amp;quot;C:/Users/jancu/.pico-sdk/cmake/v4.2.1/bin/cmake.exe&amp;quot;, &amp;quot;cmake.generator&amp;quot;: &amp;quot;Ninja&amp;quot;, &amp;quot;cmake.environment&amp;quot;: { &amp;quot;CMAKE_PROGRAM_PATH&amp;quot;: &amp;quot;C:/Users/jancu/.pico-sdk/ninja/v1.13.2/ninja.exe&amp;quot;, &amp;quot;SYSCONFIG_CLI&amp;quot;: &amp;quot;C:/ti/sysconfig_1.28.1/sysconfig_cli.bat&amp;quot;, &amp;quot;SDK_ROOT&amp;quot;: &amp;quot;C:/ti/mspm0_sdk_2_11_00_07&amp;quot; }, &amp;quot;cmake.enableTraceLogging&amp;quot;: false, &amp;quot;cmake.loggingLevel&amp;quot;: &amp;quot;info&amp;quot;, &amp;quot;ti-embedded-debug.armToolchainPath&amp;quot;: &amp;quot;c:/Users/jancu/Documents/toolchains/arm-gnu-toolchain-15.2.rel1-mingw-w64-i686-arm-none-eabi/bin&amp;quot;, &amp;quot;cortex-debug.armToolchainPath&amp;quot;: &amp;quot;c:/Users/jancu/Documents/toolchains/arm-gnu-toolchain-15.2.rel1-mingw-w64-i686-arm-none-eabi/bin&amp;quot; } If you happen to use the Raspberry Pico VS Code extension, you will already have GCC, CMake and Ninja. They are all installed by that extension. Check for /.pico-sdk on your computer. SysConfig can be downloaded from TI . The MSPM0 SDK can be cloned from GitHub . Or download it from TI . You install the VS Code extensions in the IDE, like any other extension. You will have to adapt to your installation(s). To get at the JSON file, select Settings -&amp;gt; Workspace -&amp;gt; Open Settings (JSON) Those are the prereqs. Now we&amp;#39;re ready for action. Let&amp;#39;s call our project mspm0_e14 . 1: download project and add it to your workspace A zipped VS Code project is attached at the end of this post. Download and unzip it to a place of your choice. Rename the resulting folder to your project name: mspm0_e14. rename mspm0_empty.cpp to mspm0_e14.cpp rename mspm0_empty.syscfg to mspm0_e14.syscfg adapt .vscode/settings.json to your installation the SysConfig file is configured for a MSPM0L1306 Launchpad. Change that to your device via the SysConfig GUI. In VS Code, select File -&amp;gt; Add Folder to Workspace, and select the mspm0_e14 If VS Code asks for the toolchain, select your cross compiler. If you don&amp;#39;t do it now, you still have a chance to select (and change) in the next step. 2: Open the project in CMake Toolkit, configure, build Select the CMake Toolkit, and select the folder you just added to the workspace. You can also change the toolchain if needed. Configure the project, by clicking on the button that appears when you hover over Configure. Then build, by clicking on the button that appears when you hover over Build. The project will generate 2 firmware binaries. One for loading by a debugger, the other a .hex for shabaz&amp;#39; bootloader. 3: Debug This step requires that you have a debugger, either on your LaunchPad, or a standalone XSD110 Select the VS Code Run and Debug button. There will be an entry for TI Embedded Debug. The debugger will stop at the first executable line of code in main() 4: make your own design When step 1 - 3 work, you have a good baseline to start building your own design. Use SysConfig to select and configure your peripherals (GPIO, I2C, UART, ...). If you add files to your project, take care to add them to the CMakeLists.txt. Typically in this section: # C files set(SOURCES If you create header files in subfolders, add these subfolders in this section: # Directories searched for header files include_directories( If you add libraries via the SysConfig GUI, the CMake script will find them. If you want to add other libraries, adapt these two sections: target_link_directories(${CMAKE_PROJECT_NAME} PRIVATE ) # Libraries and linker command files target_link_libraries( ${CMAKE_PROJECT_NAME} PRIVATE ) If you want a C main file, rename the .cpp file to .c, and change this entry in the CMake script: # C files set(SOURCES ${CMAKE_SOURCE_DIR}/${CMAKE_PROJECT_NAME}. c Good luck! attachment: the VS Code project community.element14.com/.../mspm0_5F00_empty_5F00_20260912_5F00_01.zip post 5: MSPM0 project with VS Code, CMake and GCC - part 5: Open .syscfg file in SysConfig GUI example that uses the template: MSPM0 interrupt messaging system part of the EasyL1105 series. all posts</description><category domain="https://community.element14.com/technologies/embedded/tags/MSPM0L1105">MSPM0L1105</category><category domain="https://community.element14.com/technologies/embedded/tags/gcc">gcc</category><category domain="https://community.element14.com/technologies/embedded/tags/MSPM0">MSPM0</category><category domain="https://community.element14.com/technologies/embedded/tags/easyL1105">easyL1105</category><category domain="https://community.element14.com/technologies/embedded/tags/VS%2bCode">VS Code</category><category domain="https://community.element14.com/technologies/embedded/tags/cmake">cmake</category><category domain="https://community.element14.com/technologies/embedded/tags/MSPM0L1306">MSPM0L1306</category><category domain="https://community.element14.com/technologies/embedded/tags/vscode">vscode</category></item></channel></rss>