欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9660|回復: 0
打印 上一主題 下一主題
收起左側

STM8S資源配置(寄存器版本)(STVD+COSMIC編譯環境)

[復制鏈接]
跳轉到指定樓層
樓主
ID:75926 發表于 2015-4-10 17:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
 1. IO口: 寄存器(X=A,B,C,D...)
        PX_DDR:   輸入輸出狀態配置 1:輸出,0:輸入.
        PX_CR1:    輸出時 1:推挽輸出 ,0:開漏輸出.輸入時 1:上拉輸入,0:浮空輸入.
        
PX_CR2:  輸出時 1:以10MHz的速度輸出,0:以2MHz的速度輸出.輸入時 1:開啟中斷功能,0:禁止中斷.
        PX_ODR:    輸出狀態寄存器 向其寫1 對應的IO口則輸出高電位,寫0則輸出低電位.
        PX_IDR:     讀狀態寄存器,讀出的結果為1 則對應IO口為高電位,為0則為低電位.

2.時鐘:(CLK)
        STM8S剛上電的時候運行的時鐘是內部的高速RC振蕩器的8分頻(HSI/8)(16MHZ/8=2MHZ),其內部還有一個低速的RC振蕩器 (LSI).用戶還可以外接一個最大值為24MHZ的外部晶振作為時鐘(HSE).可以通過軟件編程來改變系統的主時鐘.
        CLK寄存器(CLK寄存器還有很多,涉及到時鐘切換的就這幾個就可以了)
        CLK_CKDIVR: 低3位保存CPU時鐘的分頻因子(設低3位的值為x 那么分頻因子就是2^x),第3位和第4位是HSI時鐘的分頻因子;其余位保留.
        CLK_SWCR:[0](SWBSY)時鐘切換忙判斷位(沒切換完成為1,切換完成為0),[1](SWEN)時鐘切換啟動位 1啟動切換 0 禁止切換.[2](SWIEN)時鐘切換中斷選擇位 1:開啟時鐘切換中斷,0:不開啟.
        CLK_SWR: 時鐘源選擇寄存器,給這個寄存器賦值為 0xe1:主時鐘為內部高速振蕩器,0xd2:主時鐘為內部低速振蕩器,0xb4:外部高速振蕩器.
{ //時鐘切換例子 從HSI/8切換為HSE
    //CLK_CKDIVR=0;//分頻銀子設置為0
    CLK_SWR=0xb4;//選擇時鐘源
    CLK_SWCR&=~(1<<2);//關閉切換中斷
    CLK_SWCR|=(1<<1);//啟動切換
    while(CLK_SWBSY&(1<<0)==1);//等待切換完成
}


3.串口(UART) STM8S可能有很多串口,這里只講UART1
    與串口1配置相關的寄存器:
    CLK_PCKENR1:這個寄存器的第2位是UART1的時鐘啟動位,1:啟動,0:關閉 
    UART1_CR2:[2]:接收使能位(1:使能,0失能),[3]:發送使能位
(1:使能,0失能),[5]接收中斷使能位(1:使能,0失能),[6]發送完成中斷使能位(1:使能,0失能),[7]發送中斷使能位(1:使能,0失能).
    UART1_CR3:UART1模式選擇寄存器[5:4]停止位個數選擇 00:1個停止位,01:保留,10:2個停止位,11:1.5個停止位
    UART1_CR1:[1] 奇偶校驗選擇位 1:奇校驗,0:偶校驗.[2]奇偶校驗使能位 1:使能,0失能. [4]字長選擇位 1: 1個起始位 9個數據位 1個停止位, 0:一個起始位 8個數據位,UART1_CR3[5:4]個停止位.[5] UART1啟動位 0:啟動 1:關閉
    UART1_BRR2:波特率選擇寄存器2,波特率的值=主時鐘頻率/分頻因子.分頻因子就是這兩個寄存器的值.比如分頻因子為0xABCD  那么
UART1_BRR2=0xAD,UART1_BRR1=0xBC.
    UART1_BRR1:
波特率選擇寄存器1
    給這兩個寄存器賦值的時候要先給
UART1_BRR2 賦值.在給UART1_BRR1賦值,因為給UART1_BRR1賦值完成的時候波特率就已經決定好了,再給UART1_BRR2 賦值就沒有意義了.
{    //UART1配置例子(開啟收發,開啟接受中斷 關閉發送中斷)
    #define BRR     9600//定義波特率(修改波特率只需要修改這個宏的值就可以了)
    #define Fosc    16000000 //定義CPU頻率
    #define BRR1    (((Fosc)/(BRR))>>4)
    #define BRR2    (((((Fosc)/(BRR))&0xf000)>>8)|(
((Fosc)/(BRR))&0x000f))
    CLK_PCKENR1|=1<<2;//開啟UART1時鐘
    UART1_CR2&=~(1<<2);//先關閉接收
    UART1_CR2&=~(1<<3);//先關閉發送
    UART1_BRR2=BRR2;//設置波特率 先給BRR2賦值在給BRR1賦值
    UART1_BRR1=BRR1;
    UART1_CR1&=~(1<<2);//不使用奇偶校驗
    UART1_CR1&=~(1<<4);//選擇1個起始位 8個數據位
    UART1_CR3&=~(1<<4);//選擇1個停止位
    UART1_CR3&=~(1<<5);
//選擇1個停止位
    UART1_CR2&=~(1<<6);//不使用發送中斷
    UART1_CR2|=(1<<5);//使用接收中斷
    UART1_CR1&=~(1<<5);//啟動UART1
    UART1_CR2|=(1<<2);//啟動接收
    UART1_CR2|=(1<<3);//啟動發送
}


4:定時器(TIM4)
ST的單片機無論是STM32還是STM8S他的定時器的功能非常強大.強大的功能必然伴隨著配置更加復雜.我這里先學容易一些的定時器TIM4.
TIM4的寄存器:
    TIM4_IER:與中斷有關的寄存器 [0] 設置為1時開啟更新中斷,設置為0時關閉
    TIM4_PSCR:計數器的分頻因子  計數器的頻率=時鐘源頻率/TIM4_PSCR[2:0]
    TIM4_ CNTR:計數器  從TIM4_CNTR的值計數到255 然后從新從TIM4_ARR處開始計數
    TIM4_ARR:
    TIM4_EGR:事件產生寄存器 [0]設置為1時 有更新事件 為0時無更新事件
    TIM4_CR1:[0] 為1時 開啟TIM4的計數器,否則關閉TIM4的計數器
    TIM4_SR: [0]更新事件標準位,中斷處理函數里面要將其請0
{ //TIM4設置例子
    #define    PERIOD    100
    #define     ARR    ((0xff)-(PERIOD))
    TIM4_IER=0x00;//關閉所有中斷
    TIM4_PSCR=0x04;//計數器頻率=16MHZ/2^4;
    TIM4_CNTR=
ARR;
    TIM4_ARR=
ARR;
    TIM4_EGR|=(1<<0);//產生更新事件
    TIM4_CR1|=(1<<0);//開啟TIM4的計數器
    TIM4_SR&=~(1<<0);//    清除中斷標志
    TIM4_IER|=(1<<0);//       開啟更新中斷


5.使用TIM3的PWM功能
與PWM(OC1)功能有關的寄存器
    TIM3_CCMR1:模式
選擇[6:4]
    TIM3_CCER1:該寄存器的[0]為1時啟動PWM 否則關閉

    TIM3_CCR1L:比較寄存器低位
    TIM3_CCR1H:比較寄存器高位

當TIM3_CNT寄存器的值小于TIM3_CCR1寄存器時OC1輸出的電平和
TIM3_CNT大于TIM3_CCR1時的電平不一樣(至于究竟是什么電平跟模式有關)從而電位出現高低高低的變化,調節 TIM3_CCR1/TIM3_ARR的比值可以調節占空比
{    //TIM3_PWM演示
    TIM3_ARRL=100;
    TIM3_ARRH=0;
    TIM3_CCR1L=50;
    TIM3_CCR1H=0; //占空比=50/100=0.5
    TIM3_PSCR=4; //16/2^4=1 分頻
    TIM3_CCMR1|=0x70;//設置為PWM2模式
    TIM3_CCER|=0x01;//啟動PWM輸出
    TIM3_CR1|=0x01;//啟動計數器
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表