Starting STM8 Microcontrollers

Alphanumeric LCD

Alphanumeric liquid crystal displays are the most common and basic form of displays after seven segments and LED displays. They are useful for projecting multiple data quickly in ways that are otherwise difficult with other kinds of displays.

To interface a LCD with a STM8 micro, we need LCD library. The STM8 SPL does not have a library for such displays and we need to code it on our own. Interfacing a LCDs are not difficult tasks as no special hardware is required to drive LCDs other than GPIOs. However, there are some tasks needed in the software end. We need to include the library files. The process of library inclusion is discussed in the later part of this article as it needs some special attentions. The example I’m sharing here uses 6 GPIO pins from GPIOC. The read-write (R/W) pin of the LCD is connected to ground. The layout is as shown below.

Explanation

There’s little to explain this code as it involves GPIOs only. The codes for the LCD are coded using all available info on its datasheet, just initialization and working principle. One thing to note, however, is the CPU clock speed. If the CPU clock is too fast, LCDs may not work. This is because most LCDs have a maximum working frequency of 250kHz. It is best to keep this frequency below 200 kHz.

Hi sir, I’m using stvp + cosmic for almost a year. Recently as I compile there happens errors as follows: flexLM features has expired. I think my cosmic licence has expired. Thus I want to know what can I do? Can I get licence like the first time?

Excuse me shawon, I’m a bjt confused. I should resend the “CM8_license.txt” file to cosmic and how can I reapply the new license?should I replace it with previous license? I couldn’t find the previous license file. I don’t know where did I copy it…

First go to this location of your PC: “C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8″…. Run LmregFSE.exe file and fill in the infos…. You send them the generated info via email and they will send you a new license file…. Copy-paste and overwrite the license file they will send here: “C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8\License”…. Your license would then be renewed for another year…. Simple…. 🙂

I sent it for cosmic but the problem is that I don’t remember where I copied license.lic. It’s not in “C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8\License” I must overwrite the new license. how can I find previous license location?

It should be “C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8\License” if your Windows is 64-bit edition or “C:\Program Files\COSMIC\FSE_Compilers\CXSTM8\License” if your Windows is 32-bit edition….

Shawon I’ve really progressed with your masterly article. I have a question; in “interupt.vector.c” you said we should comment the “@far @interrupt void nonHandledInterrupt(void)” ( in above the interrupt.vextor.c file ) but as I comment this function I got 33 errors for 33 nonHandeledInterupts… so I didn’t do that and I’ve never had an issue yet. I want to know does it make a problem? Is it necessary to comment that function??

Hi shawon☺ , I used an External interupt for connecting a switch to micro. The problem is that when I push the button the ISR repeated many times but I want my ISR run only a time. Can you help me please??

Firstly did you use pull-up and glitch removal capacitor across the switching point? Secondly, you can remove this repetitive interrupt by disabling external/global interrupt once an interrupt has been detected and reenabling external/global after processing the ISR….

Thanks a lot shawon. I’ve tried to achieve real time. For do that I used 11.0592 Mhz crystal and timer2 on prescaler 1024, timer period: 108. With this regulation the interupt must occurs every 1ms. But it doesn’t work probably . In other words it has 1 second difference in a minute. What’s the problem?

Hi shawon, I had a look at register map and I realised that the reset value of ARR register is 0xFF provided other control register reset value are 0x00, thus I’ve putted timer period on 107 and it’s been extremely precise. What do u think about it?

I’m using the IAR environment and tried to use the delay feature from these tutorials. Unfortunately I
meet an issue with the dealay function.
I have imported both .c & .h files to the project and tried to use the delay_ms(); but during compilation I see error like below:
“Error[Li005]: no definition for “_asm” [referenced from D:\…\Debug\Obj\stm8s_delay.o].

I have no idea what can be wrong, maybe I missed add some definitions, perhaps someone could explain it to me?

Hey guys;
Could you help me please, I’ve copied the Tmer Interupt(TIM4) project, but when I built it, there was an error:
“@svlreg missing for function f_TIM4_UPD_IRQHandler”
I just recomment the top of “interupt_vector.c” because I had 33 errors.

Seems like the compiler doesn’t know the location of the source and header files…. Go to Project >> Settings…. Select Debug/Release and check the debug tab there…. Locations for the header and source files should be shown there or else you’ll get this sort of error….

yes, sir as per your video i did the process , but previously i use st’s standard peripheral library “template” to check GPIO ready project. in st’s standard library ” Example project” compiled in debug mode but in release mode it gives above error. then i follow your video process and error gone hex.file generated in debug and release mode too. my request is to make separate page for stm8 and explain the st’s standard peripheral library and your project list for stm8 only with separate section.Thanks.

Hi,
Firstly, thanks alot for your tutorials. It helps alot for beginners in STM8S because there are not much documentation for it.
Secondly, I have been trying to implement the Timer interrupt tutorial(pg. 19) and wrote the code as instructed, however I am getting this error of “invalid pointer initializer” when I added the interrupt
{0x82, (interrupt_handler_t)TIM2_IRQHandler}, /* irq13 */

in the interrupt_vector.c file as was instructed in your tutorial. Can you please help me around this issue? What am I doing wrong here? Any suggestions would be of great help.

Add only the hardware files that your target chips supports…. For example, you cannot add ADC2 for STM8S003…. This is so as STM8S003 doesn’t have these hardware blocks…. Likewise if you are using STM8S207, you cannot add UART2 files for the same reason…. If you don’t add required files then you will get errors…. You’ll also get errors if you add files that are not applicable for your target MCU….

Hi
I am using stm8s003f3 pin out board and with this code I am just testing output at micro controller pin 2 i.e. TX
I am testing this using an oscilloscope.
but not able to get any output
Can you please help?

1. Check wiring for loose connections….
2. Use a stable and noise-free power source like a battery-bank to power up the board…. Noise from PC port may cause unwanted issues….
3. Use CP2102 or FT232-based USB-TTL converter…. Don’t use PL2303-based ones because most are clones or fakes….
4. Use a short USB cable….
5. Use external pull-up resistors for both TX and RX pins….
6. Try with another board if these don’t solve the issue…. It should not behave as you are saying because the code has no issues….

Hi Shawon ,
Excellent article on stms8.
within 3 days i was able to understand STMS8 very clearly.
can you send me delay library files please.
i tried to create my own without any success.
warm regards

I’m using the same software you are using – the latest one out there…. and so someone sending it has no meaning…. I suggest that you uninstall it and give it fresh retry, following all the steps carefully…. No one can help you with licensing issue unless to do it correctly….

1. STM8S003K3 Discovery – the one I use for the blog is different from STM8S105…. They have different peripherals and so there will be differences in peripheral clocks…. Please check the device datasheet/STM8CubeMX for available hardware….

2. WWDG and IWDG are set in option bytes and they don’t use peripheral/CPU clock…. Their oscillator is separate…. Due to these they don’t have clock configurations like other peripherals….

P.S: No question is a noob question…. every question is allowed no matter how silly it may look….

i am using stms003f3p6 controller..i have done as u told exactly but tim1 input capture is not displaying any value …according to your article it should display 10…i dont have any errors everything is fine…pulse on tim2 is ok ..it is coming as u said…but capture not working..please help me …thank you…

Hi there, thanks for sharing. I learn alot thru your example, but I have encounter a problem with adc. Im currently using stm8l151k4t6. I wanna use the pin D7 as to read the voltage from my battery and monitor it (display on LCD). Can u please check where it goes wrong on my code?

yes I did enable the clock for the ADC module too. Basically i noticed that the pin is like not read by the microC. It just display the bits that I set. when I put 8 bit, it shows 255, 10 bits it show 1023 and so on.

hi shawon thanks for your response and support it turns out that my problem was a license issue I stupidly thought i use one license on multiple pc’s I used the license for a particular computer for mine that’s why I’ve been having compilation issues you have to use the license file stm8 sends you that is generated by your own pc else it won’t compile it’ll jus kip throwing you errors

It seems that you didn’t follow my instructions completely…. I found some issues:

1. You have included header and source files of ADC2, CAN, UART2, etc which are unavailable in STM8S103…. Add only files for the peripherals available in your target MCU…. Exclude the rest….

2. You have not included stm8s_delay header and source files…. Either disable it from stm8s_conf.h header file if you are not going to use it or add both the header and the source files for it in your project….

yes the comic compiler was installed properly i even received a license file from my mail with the instructions to copy the license file to the license folder in the install directory if you fail to do this it will keep popping up for you to put in the license file. iincluded all the source files and header files as instructed i am working with the cheap stm8s103f i uncommented the stm8s103f in the stm8.h header file as you instructed and just to compile the main file it just throws me errors

1. The version of STVD and Cosmic
2. Which example is giving this issue?
3. The chip you are using if it other than STM8S003
4. Have you tried to compile something else other than my examples?
5. Are the paths to libraries and other folders properly added?
6. Is the Cosmic compiler registered properly?

I am new to STM8S003k3 Discovery board.I have done UART communication using STM standard peripheral library example. Now I want to define any other GPIO pin for UART communication. Is it possible to use d0 and d1 pin for the UART communication? If yes, then please let me know how?﻿