STM8S系列基于IAR开发单通道ADC连续采样示例
生活随笔
收集整理的這篇文章主要介紹了
STM8S系列基于IAR开发单通道ADC连续采样示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
STM8S系列基于IAR開發單通道ADC連續采樣示例
- 📌相關篇《STM8S系列基于STVD開發ADC采樣示例》
?本示例基于STM8S9003K3,使用通道6(PD6),作為ADC采集引腳。使用10K可調定位器作為輸入端測試。這里直接讀取ADC數據寄存器數據進行輸出,如果需要添加數據平移算法,可以直接采用多次數據累加然后取平均值即可。
- 📓通道和引腳映射關系
📖相關寄存器介紹
-
🌿ADC 配置寄存器 1 (ADC_CR1)
-
🌿ADC 配置寄存器 2 (ADC_CR2)
-
🌿ADC控制/狀態寄存器(ADC_CSR)
-
🌿ADC 施密特觸發器禁止寄存器低位 (ADC_TDRL)
-
🌿ADC 數據低位寄存器(ADC_DRL)
📑ADC模塊初始化
/*************************************************************************** 函數名:ADC_conf* 描述 :ADC模塊初始化* ADC通道 :PD2(AIN3),PD3(AIN4),* 輸出 :無* 返回 :無 * 調用 :外部調用 *************************************************************************/ void ADC_conf(unsigned char ch ) {ADC_CR1 = (0<<4)|(1<<1)|(0<<0); //ADC時鐘輸入頻率為16MHz 這里設置分頻系數為2 連續轉換模式 先禁止ADC轉換 // ADC_CR2 = (1<<3)|(0<<1); //設置數據右對齊 禁止掃描模式ADC_CR2 = 0x08; // 同上,右對齊ADC_CSR =(0<<5)|(ch + 1); //不用外部觸發 禁止轉換結束中斷 設置轉換通道為AIN4(PD3)ADC_TDRL = ( 1 << (ch + 1 )); //禁止相應通道 施密特觸發功能 1左移ch+1位// ADC_TDRH = 4; //禁止AIN4施密特觸發器功能 ADC_CR1 |= 1; //第一次寫1是從低功耗模式喚醒 ADC_CR1 |= 1; //在這一位是1的情況下再次寫1啟動ADC轉換 }📝右對齊方式數據轉換實現
/*************************************************************************** 函數名:ADC_GetConversionValue* 描述 :獲取ADC轉換結果* 輸入 :無* 輸出 :無* 返回 :無 * 調用 :內部調用 *************************************************************************/ uint16_t ADC_GetConversionValue(void) {uint16_t value=0; uint8_t templ,temph ; // 定義templ存儲低8位數據 temph存儲高8位數據while(!(ADC_CSR & 0x80)); //等待轉換完成templ = ADC_DRL;temph = ADC_DRH; //讀取ADC轉換 在左對齊和右對齊模式下 讀取數據的順序不同 value = (uint16_t)(templ + (uint16_t)(temph << (uint8_t)8)) ; //得到十位精度的數據 0--1024//注意是10位的轉換精度 value、temph應為unsigned int 變量return (uint16_t)value; }📝數據左右對齊數據轉換綜合實現
*************************************************************************** 函數名:ADC_GetConversionValue* 描述 :獲取ADC轉換結果* 輸入 :無* 輸出 :無* 返回 :無 * 調用 :內部調用 *************************************************************************/ uint16_t ADC_GetConversionValue(void) {uint16_t value=0; uint8_t templ,temph ; // 定義templ存儲低8位數據 temph存儲高8位數據while(!(ADC_CSR & 0x80)); //等待轉換完成if ((ADC_CR2 & 0x08) != 0) /* Right alignment */{templ = ADC_DRL;temph = ADC_DRH; //讀取ADC轉換 在左對齊和右對齊模式下 讀取數據的順序不同 value = (uint16_t)(templ + (uint16_t)(temph << (uint8_t)8)) ; //得到十位精度的數據 0--1024}else {//注意是10位的轉換精度 value、temph應為unsigned int 變量temph = ADC_DRH;templ = ADC_DRL; value = ((uint16_t)temph << 2 ) + (uint16_t)templ ; //得到十位精度的數據 0--1024 }return (uint16_t)value; }🛠IAR Option Bytes配置說明
🔰由于stm8s903k3,AIN6通道在PD6引腳上,需要將串口功能映射到其他地方。否則,串口無法打印。
- 🔨點擊下面的Save保存格式后綴名位.obc格式。
- 📍在配置選項中的ST-LINK中勾選下面的選項并加載上面保存的.obc格式文件。
📑主程序代碼
/***************************************** 文件名 :main.c* 描述 :AD轉換實驗 * 程序現象:本程序通過初始化ADC的AIN6通道,將傳感器的ADC值通過串口進行打印* 寄存器版本 *****************************************//* Includes ------------------------------------------------------------------*/ #include "clk_conf.h" #include "uart.h" #include "adc.h"/* Private defines -----------------------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/ /* Private functions ---------------------------------------------------------*/void delay(u32 nCount) {/* Decrement nCount value */while (nCount != 0){nCount--;}}int main(void) {/* Infinite loop *//*設置內部高速時鐘16M為主時鐘*/ Clk_conf(); /* 串口初始化 */uart_conf();/* ADC模塊初始化AIN0->PB6, AIN1->PB5,AIN2->PB4,AIN3->PD3,AIN4->PD5,AIN5->PD6*/ADC_conf(5);printf("\r\n:%s\r\n","Using STM8s903k3");while(1){printf("ADC_value=%u\r\n",ADC_GetConversionValue());delay(0xffff);delay(0xffff);delay(0xffff); } }#ifdef USE_FULL_ASSERT/*** @brief Reports the name of the source file and the source line number* where the assert_param error has occurred.* @param file: pointer to the source file name* @param line: assert_param error line source number* @retval : None*/ void assert_failed(u8* file, u32 line) { /* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* Infinite loop */while (1){} } #endif/******************* (C) COPYRIGHT 風馳iCreate嵌入式開發工作室 *****END OF FILE****/📚程序源碼
鏈接:https://pan.baidu.com/s/1vdxOTbBcCYHYgUGTV41-lg 提取碼:nzap總結
以上是生活随笔為你收集整理的STM8S系列基于IAR开发单通道ADC连续采样示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CGI接口介绍
- 下一篇: 视频演示SHAtter越狱iOS 4.1