Arm Community
Arm Community
  • Site
  • User
  • Site
  • Search
  • User
Arm Community blogs
Arm Community blogs
Architectures and Processors blog Why do you use Cortex-M?
  • Blogs
  • Mentions
  • Sub-Groups
  • Tags
  • Jump...
  • Cancel
More blogs in Arm Community blogs
  • AI blog

  • Announcements

  • Architectures and Processors blog

  • Automotive blog

  • Embedded and Microcontrollers blog

  • Internet of Things (IoT) blog

  • Laptops and Desktops blog

  • Mobile, Graphics, and Gaming blog

  • Operating Systems blog

  • Servers and Cloud Computing blog

  • SoC Design and Simulation blog

  • Tools, Software and IDEs blog

Tell us what you think
Tags
Actions
  • RSS
  • More
  • Cancel
Related blog posts
Related forum threads

Why do you use Cortex-M?

logenyang
logenyang
December 24, 2015
10 minute read time.

Hello everyone,

I would like to know why you are using Cortex-M microcontroller.

Why don't you adopt other microcontrollers such as 8-bit, 16-bit or MIPS or x86?

The background is that I plan to write a special article regarding Cortex-M on the Interface which is the monthly magazine of Japan published by CQ publishing. However, I cannot say why Cortex-M should be featured because Cortex-M is already famous and almost common sense of microcontrollers. I would like to get exclusive (or special) meanings to introduce Cortex-M nowadays. Please let me know the significance of Cortex-M.

Thank you and best regards,

Yasuhiko Koumoto.

Hi yasuhikokoumoto

The main reason I choose an ARM Cortex-M is to have a higher speed which guarantees me a more effective response even in simple applications, the largest memory capacity is also an important factor, allowing the use of more complex algorithms, and clear the scalability of processors, since my focus is more academic can start the project in a smaller version and adopt a more robust microcontroller if the project course is identified to need more resources without worrying about having to rewrite the code to a new architecture. Already 32-bit, end up becoming a gift for the project.

I have several reasons.

I migrated from 8-bit microcontrollers to ARM7TDMI, mainly because I needed to run code directly from the on-chip SRAM.

This was all due to that I needed very high speeds, especially on GPIO ports, but the CPU speed also needed to be high.

I found that the ARM7TDMI was more difficult than I expected, so after a while, I decided to try Cortex-M.

It turned out that it was very easy to get the Cortex-M to do what I wanted, so I've used it ever since.

The main reasons I use Cortex-M over 8-bit microcontrollers are:

  • You can run code from S-RAM (eg. you can create the code on-the-fly or load it from SD-card)
  • The GPIO-pin speed is higher.
  • You can write more than 8 bits in one go; eg. you can set up to 32 bits on a GPIO port in a single write cycle.
  • The CPU-speed is higher.
  • You can change the CPU-speed in your firmware while your program is running.
  • You can turn off peripherals when you're not using them, thus saving power.
  • The lowest operating voltage is around 1.65V, which makes the Cortex-M ideal for running directly on solar panels
  • I fancy the instruction set (especially the second operand features): Simple but powerful.
  • There's generally more on-chip memory available.
  • It's possible to connect external SRAM or SDRAM and access it in the same way the internal memory is accessed.
  • Much more peripherals are available and often extra configuration options are available for a peripheral.
  • If a peripheral is not available, it's usually possible (due to the high CPU-speed) to roll your own driver; for instance a firmware-based SPI.
  • Many Cortex-M device families allow you to connect Fast Ethernet (100 Mbit) some even allow MII (125 Mbit)
  • It's very easy to find out how to do what you want (many examples exists on the net)
  • If you suddenly find out that you need a larger chip or a different CPU core, you can switch it in the middle of your design and you do not have to rewrite your sources from scratch; in some cases you don't even have to change a single line of code.
  • Cortex-M is using less power than the 8-bit controllers I used (and also most other 8-bit microcontrollers in general).

(Yes, all the above mentioned reasons are important to me, though there are more benefits when using Cortex-M than the above)

Note: On some Cortex-M microcontrollers, it's possible to use the DMA to write the GPIO pins and thus output more than 32 bits on the exact same clock cycle.

I'm very much interested in developing with Cortex-A, but to do so, I'm still required to learn a lot more.

Cortex-M, on the other hand, is an easy way to get fast speeds and connect extra memory.

Nice points by jensbauer.

Would like to add a couple more.

1. I was fascinated to Cortex-M because of the range it offers. Starting from Cortex-M0 upwards to M7 now, the number of devices available are really vast. This has the benefit that if I want to develop a very small product low cost (Let's say some handheld battery powered, or the wearable kind), there is a good choice M0. At the same time, if I want to develop quite a complex product needing lot more computing power, DSP or more number of I/Os, peripherals like Ethernet, USB.. Yes I can go for M4 or M7.

2. The added advantage of this range is you can keep using the same tools so don't need more and more investment per product.

3. Since ARM is very popular, it is easier to get engineers to work on the ARM processors than to get people with expertise on some other. (This is comparative, not saying that we don't get people for other processors).

4. CMSIS makes it a bit easier to write a uniform code.

5. There is also choice of different vendors. Although the code may not be directly portable from one vendor's processor to another, still it gives a peace of mind that choice is available without major disruptions to the software.

Hope it helps. Do send us a link of the article (if it is in English !)

Hello Carlos Delfino, Jens Bauer and Gopal Amlekar,

I am very pleased with your comments.

From them, I feel the advantages of Cortex-M would be scalability and best performance/MHz.

Hello Jens Bauer, I understand you loves (probably) STM32 very much and I guess ARM would be happy because of your fascinations.

Hello Gopal Amlekar, unfortunately the magazine does not have English link and not be opened full articles. The first page of each articles is referred from http://interface.cqpub.co.jp/ but it is written in Japanese.

Anyway, I will put basic ideas of the introduction parts of the issue and at I might write articles of other topics. The issue date is 25th December of this year.

For your information, I have been inspired by your comments and thank you very much.

Currently my idea is that I feel the definitions (or significance) of Cortex-M have been verified from the original ARM assumptions at the IoT era. For example, almost all wearable devices had been adopted Cortex-M4(F) (not Cortex-M3 or Cortex-M0) and even in the case of Cortex-M0, it will run at over 200MHz clock frequency. I think it would be the time to re-define the importance of existence for Cortex-M series.

Any questions and even objections are welcome.

Best regards,

Yasuhiko Koumoto.

Indeed, I'm very fond of the STM32 family.

So far, these are the highest clock frequency speeds I've noticed:

  • Cortex-M0: 204 MHz
  • Cortex-M0+: 100 MHz
  • Cortex-M3: 200 MHz
  • Cortex-M4: 204 MHz
  • Cortex-M7: 300 MHz

- I believe that at some point, we'll also see the Cortex-M0+ running at 200 MHz or more (maybe it already does).

The STM32 family shows that they can perform better than microcontrollers using the same core, which runs at a higher clock frequency.

Though I fancy the STM32 family the most, I still like to work with other microcontrollers, as long as they have an ARM core.

Hello Jens Bauer,

this is just for your information.

Renesas Synergy MCU S7 series equips Cortex-M4 core of which speed is 240MHz.

http://www.renesas.com/products/embedded_systems_platform/synergy/microcontrollers/s7_series/index.jsp

Because it will be produced by 40nm process, the power consumption is only 18mA at run mode and 0.9uA at the standby mode.

Also Renesas Technology has the high speed flash technology, and S7's flash will operate at 100MHz.

I think it would be the most powerful Cortex-M4 microcontroller.

However, it cannot be sold in form of a separated device. It is a part of the Renesas Synergy Platform.

Best regards,

Yasuhiko Koumoto.

Thank you for letting me know this.

I have no doubt that speeds will still increase (even for the Cortex-M3).

The S7 specifications really look good, especially the 640KB SRAM and dual Ethernet.

It does look like different packages are available: LQFP 100/144/176, BGA 176/224, LGA 145, so I think they will be available in stand-alone form at some point.

Jens,

Like Yasuhiko's FYI for Renesas Synergy MCU S7,

Analog Devices' ADSP-CM40x, which is also based on the ARM®Cortex®-M4, can run up to 240 MHz, the maximum clock speed of the Renesas S7.

The ADSP-CM40x may not have much charm to you since the family is designed primarily for motor control and industrial applications and because of the price of Evaluation Boards. The S7 has twice the Flash and almost twice the SRAM and has more features such as security and human-machine interface. The S7 is under development. The ADSP-CM40x is in production, it was introduced between 2013 and first quarter of 2014, I don't have more accurate estimate of the date because I lost the notification.

The LPC4300 is a little slower but it's a two-core processor, Cortex M4F and Cortex M0 both having maximum clock of 204 MHz.

Goodwin

Hello all,

Big News.

Synergy MCU S7G2 and S3A7 are now available at Digi-Key.

We cannot buy by form of a part but can by form of a board.

Please refer to the following links.

Evaluation Boards - Embedded - MCU, DSP | Programmers, Development Systems | DigiKey

YSDKS3A7E20PWS2 Renesas Electronics America | YSDKS3A7E20PWS2-ND | DigiKey

Also, the flash speed of 240MHz S7G2 has been unveiled. It is 120MHz!.

The following article explains (sorry in Japanese)

1) Why was ARM architecture adopted?

2) Why was Cortex-M4 chosen instead of Cortex-M3?

3) Why was Cortex-M7 not selected?

Renesas DevCon 2015 - ルネサスがSynergyに注力する意味と意義とは? (4) なぜSynergyはARM Cortex-Mコアを採用したのか? | マイナビニュース

Renesas DevCon 2015 - ルネサスがSynergyに注力する意味と意義とは? (5) なぜ、Cortex-M3ではなく、Cortex-M4が採用されたのか? | マイナビニュース

For your information, I would add the short summary.

1) The new market will be it in which ARM microcontrollers had been already adopted and it which Renesas had not reseached yet.

To enter it, the peripherals were re-investigated and applied to customer convenience.

As the results, the software compatibility had been lost with traditional Reenesas microcontrollers and make the new ARM series.

2) Reneas had build both Cortex-M3 and Cortex-M4 platforms.

From the whole system power consumption aspect, Cortex-M4 was better than Cortex-M3.

The transition time between RUN and STANDBY modes was faster with Cortex-M4 than Cortex-M3.

The additional instructions (DSP/FPU) made Cortex-M4 higher performance.

3) The supply of Cortex-M7 had not been in time by about 6 months.

Because the flash speed is 120MHz, the 240MHz S7G2 is very fast  and the clock scheme is simple.

The peformance of Cortex-M7 and Cortex-M4 had been almost the same but the power consumption of Cortex-M7 had been higher than Cortex-M4.

Best regards,

Yasuhiko Koumoto.

This is great information and wonderful news!

The $75 kit really looks great; it's affordable and offers quite a lot of features.

I think that Renesas would be able to make the Cortex-M7 perform 1.6 times the Cortex-M4, though.

-But we'll have to wait and see what they come up with.

Do you know how "wide" their GPIO ports are (eg. 16 pins or 32 pins per port) and when running at 240 MHz, how many clock cycles it takes before a pin changes from low to high or hight to low ?

Hello Jens Bauer,

The width of GPIO is at max. 172 depending on a packaging.

Almost all functional pins can be configured as GPIOs.

GPIO is driven by at max. 120MHz and change latency would be 1 cycle.

If you want the cycles from store execution to GPIO output, I don't know it.

Best regards,

Yasuhiko Koumoto.

"GPIO is driven by at max. 120MHz and change latency would be 1 cycle"

This indeed sounds very nice.

Just to confirm: It will be able to change the value of a single GPIO pin 240000000 times per second ?

(The reason for me asking, is that I'm very interested in fast parallel data transmission, thus I need a high speed and as many pins as possible).

Hello Jens Bauer,

I think a GPIO pin can keep high by 1 cycle and low by 1 cycle.

So, It will be able to change the value of a single GPIO pin 60000000 times per second at 120MHz.

The data width of one transaction is at max. 16 bits.

Therefore 60MHz 16bit GPIO can get 120MB/sec.

Best regards,

Yasuhiko Koumoto.

Scalability is greater, i2c i2s, net .......

More convenient application

Do not need to know the specific register settings

So easy to transplant to any items

Hello Alex Lee,

Please tell me the inevitability why the cpu core should be Cortex-M.

Your answer sounds as if any cpu cores are appropriate.

Best regards,

Yasuhiko Koumoto.

More chip companies can choose using cortex-m

该文档由下列讨论生成:Why do you use Cortex-M?

Anonymous
Architectures and Processors blog
  • When a barrier does not block: The pitfalls of partial order

    Wathsala Vithanage
    Wathsala Vithanage
    Acquire fences aren’t always enough. See how LDAPR exposed unsafe interleavings and what we did to patch the problem.
    • September 15, 2025
  • Introducing GICv5: Scalable and secure interrupt management for Arm

    Christoffer Dall
    Christoffer Dall
    Introducing Arm GICv5: a scalable, hypervisor-free interrupt controller for modern multi-core systems with improved virtualization and real-time support.
    • April 28, 2025
  • Getting started with AARCHMRS Features.json using Python

    Joh
    Joh
    A high-level introduction to the Arm Architecture Machine Readable Specification (AARCHMRS) Features.json with some examples to interpret and start to work with the available data using Python.
    • April 8, 2025