<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>HSE arşivleri - N7A Teknik</title>
	<atom:link href="https://n7atechnic.com.tr/tag/hse/feed/" rel="self" type="application/rss+xml" />
	<link>https://n7atechnic.com.tr/tag/hse/</link>
	<description>Teknik İşler</description>
	<lastBuildDate>Tue, 03 May 2022 23:18:32 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://n7atechnic.com.tr/wp-content/uploads/2022/05/cropped-logo_mono-1-32x32.png</url>
	<title>HSE arşivleri - N7A Teknik</title>
	<link>https://n7atechnic.com.tr/tag/hse/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>STM8 Programlama -IAR- #6 (Clock Ayarları)</title>
		<link>https://n7atechnic.com.tr/stm8-programlama-iar-6-clock-ayarlari/</link>
					<comments>https://n7atechnic.com.tr/stm8-programlama-iar-6-clock-ayarlari/#respond</comments>
		
		<dc:creator><![CDATA[N7A Tech]]></dc:creator>
		<pubDate>Thu, 23 Apr 2020 11:33:10 +0000</pubDate>
				<category><![CDATA[STM8]]></category>
		<category><![CDATA[Tüm Yazılar]]></category>
		<category><![CDATA[CLK]]></category>
		<category><![CDATA[CLK_CCO]]></category>
		<category><![CDATA[ClockSource]]></category>
		<category><![CDATA[Gömülü Sistem]]></category>
		<category><![CDATA[High Speed Internal]]></category>
		<category><![CDATA[HSE]]></category>
		<category><![CDATA[HSI]]></category>
		<category><![CDATA[IAR]]></category>
		<category><![CDATA[Low Speed Internal]]></category>
		<category><![CDATA[STLINK]]></category>
		<category><![CDATA[STM Embedded]]></category>
		<category><![CDATA[stm8 clock]]></category>
		<category><![CDATA[STM8 Code]]></category>
		<category><![CDATA[STM8 IAR]]></category>
		<category><![CDATA[STM8 Programing]]></category>
		<category><![CDATA[STM8 Programlama]]></category>
		<category><![CDATA[STM8S]]></category>
		<category><![CDATA[stm8s_clk.h]]></category>
		<category><![CDATA[STM8S103F3]]></category>
		<guid isPermaLink="false">https://n7a.web.tr/?p=2571</guid>

					<description><![CDATA[<p>Merhabalar,Bu yazımızda MCU&#8217;nun clock ayarlarını ayrıntılı bir şekilde inceleyeceğiz. CLK_CCO çıkışını kullanarak lojik analizör ile inceleyeceğiz. ST firmasının STM8 ailesinde aşağıda da görüldüğü gibi esnek clock<span class="excerpt-hellip"> […]</span></p>
<p><a href="https://n7atechnic.com.tr/stm8-programlama-iar-6-clock-ayarlari/">STM8 Programlama -IAR- #6 (Clock Ayarları)</a> yazısı ilk önce <a href="https://n7atechnic.com.tr">N7A Teknik</a> üzerinde ortaya çıktı.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="has-normal-font-size">Merhabalar,<br>Bu yazımızda MCU&#8217;nun clock ayarlarını ayrıntılı bir şekilde inceleyeceğiz. CLK_CCO çıkışını kullanarak lojik analizör ile inceleyeceğiz. ST firmasının STM8 ailesinde aşağıda da görüldüğü gibi esnek clock ayarları yapabilmek mümkün. CPU çalışma frekansı ile çevre birimleri çalışma fekanslarını ayrı ayrı ayarlamak mümkün. Osilatör kaynaklarımızı daha önceki yazılarımızda incelemiştik kısaca hatırlaycak olursak <br>&#8211; HSE (High Speed External)<br>&#8211; HSI (High Speed Internal (RC))<br>&#8211; LSI (Low Speed Internal)</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://www.mcu-turkey.com/wp-content/uploads/2012/11/ppp1.jpg" alt="MCU Turkey – STM8S – İlk Uygulamalar (Clock ve GPIO Konfigürasyonu)"/></figure></div>



<p class="has-normal-font-size">Mikrodenetleyicinin clock kaynağını (HSI) High-Speed dahili osilatör olarak seçeceğiz. Bu durumda Master Clock Switch  f<sub>HSIDIV</sub> olarak seçilmelidir. Bu kaynağın 4 adet ön bölücü değeri vardır. Bu değerler 16 MHz olan HSI osilatör kaynağını (/8/4/2/1) seçnekleri arasından seçeceğimiz değere böler ve bölünmüş clock f<sub>MASTER</sub> hattına geçiş yapar. Şemadan da görüldüğü gibi TIMER,I2C,SPI,ADC,AWU,CAN,UART çevre birimleri bu hattan doğrudan beslenir. Dolayısıyla HSIDIV ön bölücü değerimizin sonucunda bu çevre birimlerinin clock kaynağının sağlandığını unutmayalım.<br>HSIDIV&#8217;i ayarladıktan sonra  CPUDIV ön bölücü değeri için 8 seçenek mevcut (/1/2/4/8/16/32/64/128). CPUDIV ön bölücü değerine göre ise f<sub>CPU</sub> frekansı belirlenmiş olur.</p>



<p class="has-normal-font-size">Örnek; Osilatör kaynağımız HSI (16MHz) olsun. HSIDIV=/2, CPUDIV=/4 olduğunu varsayalım.<br>O halde f<sub>MASTER</sub>= 16/2 = 8 MHz olacaktır. Buda demek oluyor ki çevre birimlerinin çalışma frekansı ve CPUDIV giriş frekansı 8MHz&#8217;dir.<br><br>f<sub>CPU</sub> = 8/4 = 2MHz olacaktır. Buda mikrodenetleyimizin çekirdeği 2MHz ile koşacağı anlamına gelir. Saniyede 2 milyon işlem yapabilir diyebiliriz.</p>



<p class="has-normal-font-size">Şimdi kod IAR derleyicisi için kodlarımıza geçelim.
Öncelikle main.c dosyamızda stm8s_clk.h kütüphanesini dahil etmeliyiz.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
#include &quot;stm8s_clk.h&quot;
</pre></div>


<p class="has-normal-font-size">Daha sonra kullanacağımız osilatör kaynağını aktif etmeliyiz (HSI).</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
CLK_HSECmd(DISABLE);
CLK_LSICmd(DISABLE);
CLK_HSICmd(ENABLE);
</pre></div>


<p class="has-normal-font-size">Osilatör hazır olana kadar, ilgili osilatörün bayrağı SET olana kadar CLK_GetFlagStatus(); fonksiyonundan aldığımız cevaba göre while dönüsü ile bekleme yapıyoruz. Fonksiyonun parametreleri şu şekildedir;</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
typedef enum {
CLK_FLAG_LSIRDY = (uint16_t)0x0110, /*!&lt; Low speed internal oscillator ready Flag */
CLK_FLAG_HSIRDY = (uint16_t)0x0102, /*!&lt; High speed internal oscillator ready Flag */
CLK_FLAG_HSERDY = (uint16_t)0x0202, /*!&lt; High speed external oscillator ready Flag */
CLK_FLAG_SWIF = (uint16_t)0x0308, /*!&lt; Clock switch interrupt Flag */
CLK_FLAG_SWBSY = (uint16_t)0x0301, /*!&lt; Switch busy Flag */
CLK_FLAG_CSSD = (uint16_t)0x0408, /*!&lt; Clock security system detection Flag */
CLK_FLAG_AUX = (uint16_t)0x0402, /*!&lt; Auxiliary oscillator connected to master clock */
CLK_FLAG_CCOBSY = (uint16_t)0x0504, /*!&lt; Configurable clock output busy */
CLK_FLAG_CCORDY = (uint16_t)0x0502 /*!&lt; Configurable clock output ready */
}CLK_Flag_TypeDef;
</pre></div>


<p class="has-normal-font-size">Osilatör kaynağımız HSI olduğu için CLK_FLAG_HSIRDY seçmeliyiz.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == 0);
</pre></div>


<p class="has-normal-font-size">Yukarıda bahsettiğimiz ön bölücü değerlerini ayarlıyoruz. Parametrelerin sonlarındaki rakamı yukarıdaki ilgili değerlerle değiştirerek istediğimiz çalışma frekansını elde edebiliriz.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //fMASTER
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1); //fCPU
</pre></div>


<p class="has-normal-font-size">Clock ayarlarmaları için bir diğer durum ise CLK_ClockSwitchConfig() fonkisyonudur. Bu özellik mikrodenetleyici çalışıyorken clock kaynağını manuel veya otomatik değiştirmeye olanak sağlar. İşlem otomatik olarak seçilir ise; ana osilatörde herhangi bir problem oluşursa seçeceğimiz alternatif osilatör kaynağı devreye alınacak ve istersek ana osilatörü pasif edebileceğiz. Örnek fonksiyon ve parametre açıklamaları;</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI,
DISABLE, CLK_CURRENTCLOCKSTATE_ENABLE);
/**
  * CLK_SWITCHMODE_AUTO/_MANUEL : işlemin otomatik veya ellemi seçileceğini
  * CLK_SOURCE_HSI/_LSI/_HSE    : Alterantif olarak seçilecek kaynağı(yedek)
  * DISABLE/ENABLE : Otomatik veya manuel farketmeksizin böyle bir işlem 
  *gerçekleştiğinde kesme oluşmasını istiyorsak ENABLE olması gerekir.
  * CLK_CURRENTCLOCKSTATE_ENABLE/DISABLE : İşlem gerçekleşirse ana kaynağı 
  *pasif konuma getireceksek DISABLE seçmeliyiz.
  */
</pre></div>


<p class="has-normal-font-size">Değinmek istediğim bir diğer nokta ise bu kütüphanedeki CCO (Configurable Clock Output) özelliğidir.   Bu özelliklik ile birlikte mikrodenetleyicinin ilgili pininden (PC4/CLK_CCO) aşağıdaki seçeneklerden istediğimiz clock sinyalini elde edebiliriz. Geliştirdiğimiz sistemde herhangi bir osilatör kaynağına ihtiyaç duymamız halinde bu özelliği kullanabiliriz. Ayrıca ilgili osilatör kaynağı freknasını CCO ile gözlemlemek mümkündür.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
typedef enum {
  CLK_OUTPUT_HSI      = (uint8_t)0x00, /*!&lt; Clock Output HSI */
  CLK_OUTPUT_LSI      = (uint8_t)0x02, /*!&lt; Clock Output LSI */
  CLK_OUTPUT_HSE      = (uint8_t)0x04, /*!&lt; Clock Output HSE */
  CLK_OUTPUT_CPU      = (uint8_t)0x08, /*!&lt; Clock Output CPU */
  CLK_OUTPUT_CPUDIV2  = (uint8_t)0x0A, /*!&lt; Clock Output CPU/2 */
  CLK_OUTPUT_CPUDIV4  = (uint8_t)0x0C, /*!&lt; Clock Output CPU/4 */
  CLK_OUTPUT_CPUDIV8  = (uint8_t)0x0E, /*!&lt; Clock Output CPU/8 */
  CLK_OUTPUT_CPUDIV16 = (uint8_t)0x10, /*!&lt; Clock Output CPU/16 */
  CLK_OUTPUT_CPUDIV32 = (uint8_t)0x12, /*!&lt; Clock Output CPU/32 */
  CLK_OUTPUT_CPUDIV64 = (uint8_t)0x14, /*!&lt; Clock Output CPU/64 */
  CLK_OUTPUT_HSIRC    = (uint8_t)0x16, /*!&lt; Clock Output HSI RC */
  CLK_OUTPUT_MASTER   = (uint8_t)0x18, /*!&lt; Clock Output Master */
  CLK_OUTPUT_OTHERS   = (uint8_t)0x1A  /*!&lt; Clock Output OTHER */
} CLK_Output_TypeDef;
</pre></div>


<p class="has-normal-font-size">CCO&#8217;yu kullanabilmek için ilgili CLK_CCO pin konfigürasyonunu (STM8S103F3 için PC4 pini)  input pull-up veya output push-pull moduna getirmeliyiz (push-pull,pull-up için buraya).</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
CLK_CCOConfig(CLK_OUTPUT_CPU);
CLK_CCOCmd(ENABLE);
</pre></div>


<p class="has-normal-font-size">PC4 pini için gerekli ayarlamayı yaptıktan sonra PC4 pininden CPU çalışma frekansındaki sinyali almış olacağız.</p>



<p class="has-normal-font-size">Konuyu şöyle bir toparlarsak&#8230;.. Yapacağımız uygulamalarda kartımızın üzerinde harici bir kristal osilatör olmadığı için dahili HSI osilatörü kullanacağız. Bu osilatör kaynağı ile ilgili bir ön yargınız/şüpheniz olmasın bu birim gayet sağlıklı çalışmaktadır. Buna göre ilerideki uygulamalarda kullanabileceğimiz bir clock ayarı için kodumuz şöyle olur;</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
CLK_DeInit();	
CLK_HSECmd(DISABLE);
CLK_LSICmd(DISABLE);
CLK_HSICmd(ENABLE);
while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY) == 0);

CLK_ClockSwitchCmd(ENABLE);
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV2);
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);

</pre></div>


<p class="has-normal-font-size">Bu kodu void main(void) döngüsünün hemen altına yazarak kullanabiliriz.</p>



<p class="has-normal-font-size">Aşağıda CLK_CCO ya ait uygulamanın kodları bulunmaktadır. Ayrıca proje dosyasını <a href="https://bit.ly/3axTF7h">buradan </a> indirebilirsiniz.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
/**
  ******************************************************************************
  * @file    Project/main.c 
  * @author  N7A TECHNIC
  * @brief   Main program body
   ******************************************************************************
  *        www.n7a.web.tr
  ******************************************************************************
  */ 

/* Includes ------------------------------------------------------------------*/
#include &quot;stm8s.h&quot;
#include &quot;stm8s_clk.h&quot;
#include &quot;stm8s_gpio.h&quot;

/* Private defines -----------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

void main(void)
{
  /* Infinite loop */
  CLK_DeInit();
  CLK_HSECmd(DISABLE);
  CLK_LSICmd(DISABLE);
  CLK_HSICmd(ENABLE);
  
  while(CLK_GetFlagStatus(CLK_FLAG_HSIRDY)==0);
  
  CLK_ClockSwitchCmd(ENABLE);
  CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV4);
  CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV2);
  
  GPIO_Init(GPIOC,GPIO_PIN_4,GPIO_MODE_OUT_PP_LOW_FAST);
  
  CLK_CCOConfig(CLK_OUTPUT_CPU);
  CLK_CCOCmd(ENABLE);
  
  while (1)
  {
  }
}

#ifdef USE_FULL_ASSERT

void assert_failed(u8* file, u32 line)
{ 
  /* User can add his own implementation to report the file name and line number,
     ex: printf(&quot;Wrong parameters value: file %s on line %d\r\n&quot;, file, line) */

  /* Infinite loop */
  while (1)
  {
  }
}
#endif


/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

</pre></div>


<h2 class="wp-block-heading">Teorik Eğitim:</h2>



<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="STM8 Programlama -IAR- #6 (Clock Ayarları - CLK_CCO)-1 STM8S103F3" width="1200" height="675" src="https://www.youtube.com/embed/PaTP6qRQRRQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>



<h2 class="wp-block-heading">Uygulama:</h2>



<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="STM8 Programlama -IAR- #6 (CLK_CCO Uygulama)-2 STM8S103F3" width="1200" height="675" src="https://www.youtube.com/embed/r5ZZUG2j3jg?feature=oembed" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div></figure>
<p><a href="https://n7atechnic.com.tr/stm8-programlama-iar-6-clock-ayarlari/">STM8 Programlama -IAR- #6 (Clock Ayarları)</a> yazısı ilk önce <a href="https://n7atechnic.com.tr">N7A Teknik</a> üzerinde ortaya çıktı.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://n7atechnic.com.tr/stm8-programlama-iar-6-clock-ayarlari/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
