PA4のDAC1とPA5のDAC2です
で これが使えれば面白そうだなぁと おもって
関数もADCより少ないので 楽にできそうだな と思って
試してみました
初期化コード↓
void DAC_init() {
GPIO_InitTypeDef
GPIO_InitStructure;
GPIO_InitStructure.GPIO_Speed
= GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Pin =
_BV(4);
GPIO_InitStructure.GPIO_Mode
= GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,
&GPIO_InitStructure);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,
ENABLE);
DAC_InitTypeDef
DAC_InitStructure;
DAC_InitStructure.DAC_Trigger
= DAC_Trigger_None;
DAC_InitStructure.DAC_WaveGeneration
= DAC_WaveGeneration_None;
DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude
= DAC_TriangleAmplitude_4095;
DAC_InitStructure.DAC_OutputBuffer
= DAC_OutputBuffer_Enable;
DAC_Init(DAC_Channel_1,
&DAC_InitStructure);
DAC_Cmd(DAC_Channel_1,
ENABLE);
}
おかしな部分もあるかもしれませんが
とりあえず動作確認ということで
ちょっと気になるのが
GPIO_Modeで
なんでPP(プッシュプル)なのかなぁと
動いてるしいいはずですが
アナログ値を出す以上プッシュ・プルじゃないだろ と思うんですよね
で ピンに値を出すには
DAC_SetChannel1Data
という関数を使います
これは引数が2個あり
1個目がデータのフォーマット
2個目がデータ自体
となります
基本的に
DAC_SetChannel1Data(DAC_Align_12b_R, 0x0FFF);
という感じでいいはずです
出力される電圧は0~3.3で12bitなので
0.80566406mV単位となります
まぁ普通に遊ぶ程度なら問題ないかと
とりあえず STBeeには2本のDACがあるので
音を出したら面白いかなぁと 思っています
声とか 曲とか
12bitなので ちょっと心配ですが
(PCは16bitが一般的)
これでPCで録音した声を再生できたら
面白いんじゃないかと思ってます
フリーのセリフ素材とかもあるので
時計作ってみたり
別の重要な理由もありますが
とりあえず今回はこんなとこまでで
0 件のコメント:
コメントを投稿