Hobby Lab 趣味のモノ作り実験のサイトです。
部品 プロセッサー他 CH32V 003F4P6_開始
1 概要
2 仕様
2.1 特徴
2.2 電気的特性
3 Pinの定義
4 テスト回路と開発方法
4.1 テスト回路
4.2 使用IDE
4.3 IDE(PC)と003J4M6を接続
5 テスト回路と開発方法
5.1 テスト回路
5.2 使用IDE
5.3 IDE(PC)と003J4M6を接続
5.4 動作確認

Pr:Prプロセッサ関係
PrP:プロセッサ
動作比較
 STM32F動作比較
 CH32V203&STM32F 動作比較
 arduino動作比較
raspberrypi関係
 RaspberryPiハード
CH32V関係
 -CH32V開始
 -203K8T6(32Pin)開始
 -203C8T6(48P)開始
 -003J4M6(8Pin)開始
 -003F4P6(20Pin)開始
 -Moun River StudioⅡ
 プログラミング!
  203_GPIO関係
  203_TIME関係
  203_TIME Encoder
  203_I2C関係
  203_1-Wire関係
  003_DS18B20テスター
  USART(UART)関係
  DS18B20をModBus制御
 -マニュアル
 203データシート
 203取説
  MBA メモリとバス方式
  PWR 電力制御
  RCC リセット・拡張・クロック
  BKP バックアップレジスタ
  CRC 巡回冗長検査
  RTC リアルタイムクロック
  GPIO GPIOと代替機能
  DMA ダイレクトメモリアクセス制御
  ADTM 高度な制御タイマー
  GPTM 汎用タイマー
  BCTM 基本タイマー
  USART 同期非同期通信
arduino関係
 ESP12関係
 (a)ESP-8266D1mini注意
PrP:その他  RS485ドライバー
 CP2102 BRIDGE
 WCH-LinkEエミュレーター
Pr:Wire 電線関係
Pr:Resistance 抵抗
Pr:Capacitor コンデンサ
Pr:Coil コイル
Pr:PassiveElmt 受動素子
Pr:Diode ダイオード関係
Pr:OPAMP オペアンプ関係
PrO:送受信機  Si4735
PrO:オペアンプ  LM324
 LM358
Pr:Tr トランジスタ関係
2SC1815
 リレードライバー設計
 アンプ設計
 発振器
TLP152
 TLP152テスト
TLP2361
 TLP2361テスト
TLP5754
 TLP5754テスト
Pr:Source 電源関係  ツェナーダイオード
 TL431
 LM317
PrS:Downモジュール
 EGS002_IR2110S
 SKU011012
 ACDC02
 XH_M299
 LM2596
 Mini360_MP23070N
 DROK
 WH140
PrS:UPモジュール
 MT3608
PrS:充電モジュール
 TP4056
Pr:Sensor_AD_時計等
PrS:電圧、電流
ADS1115 16bit4CH I2C A/D
 Hardware
 RaspberryPi_コマンド接続
 RaspberryPi_Python
 Arduino
 CH23V203 MounRiverStudioⅡ
INA226 I2C 直流電圧電流
 Hardware
 Arduino
 RaspberryPi_Python
WCS 電流ホール素子
 Hardware
PrS:温度、気圧、湿度、照度
BNE280 I2C 気圧,湿度,気温
 Hardware
 Arduino
 RaspberryPi_Python
BH1750 I2C 照度
 Hardware
 Arduino
 RaspberryPi_Python
DS18B20 1-Wire 温度計
 Hardware
 Arduino
 RaspberryPi_Python
PrS:時間、日時
DS3231 I2C 時計
 Hardware
 Arduino
 RaspberryPi_Python
PrS:表示器
MAR3953 320X480 3.95"
 概要と線や点を描く
 フォントを描く
SSD1306 I2C 0.96"OLED
 Hardware
 Arduino
 RaspberryPi_Python
Pr:Old Processor他

1. 概要

CH32V003F4P6 と言う 20Pinの MCU があり購入しました。
CH32V003J4M6も小さいですが、このMCUもPin数が多いですが、Pin間隔が小さいので、コンパクトになっています。 CH32V003J4M6との比較を下表にした。
J4M6F4P6
Pin 820
間(mm) 1.270.65
本体
寸法
X方向(mm)3.94.4
Y方向(mm) 5.06.5
最大クロック周波数が 48MHzです。
最初はCH32V003J4M6がプログラムダンロードとUSART1 Txが同じpinになっているため、このMCUでJ4M6のプログラムを開発しようと思います。

このCH32V003F4P6は20個送料含みで 614円 1個あたり 31円で購入できました。
また pin間隔を 2.54mmにする基盤 1枚10円ぐらいを購入してMCUをハンダ付けしたのが右上の写真です。(汚いハンダ付けです。)
合わせて 41円 で遊べます。

当初開発する時の結線方法も判らなかったので、同時に開発ボードも購入しました。
これは、2個で328円でした。右の写真

同価格・性能のMCUが日本製にあれば、ぜひ購入したいと思います。




2. 仕様

2.1 特徴

CH32V003J4M6とCH32V003F4P6との特徴を比較したのが下表です。
CH32V 003
型番 J4M6F4P6
CPU clock speed 48MHz48MHz
Package SOP8TSSOP20
Flash memory 16K 16K
SRAM 2K 2K
DMA Channels 7 7
OPA x 2 2
GPIO 6 18
AdvancedControlTimer1 1
GeneralPurposeTimer 1 1
Watchdog 2 2
SystemClockSource 3 3
ADC Chinnel 6 8
USART 1 1
SPI -- 1
I2C 1 1

2.2 電気的特性

特にCH32V203と違うのはVDDの上限が5.5V(203は4V)であること
CH32V 003
項目 MinMax
External main supply voltage (VDD) -0.3(V)5.5(V)
Sink current on any I/O and control pin --20(mA)
Output current on any I/O and control pin--20(mA)



3. Pinの定義

Pin
No
Pin
Type
function
MainDefaultRemapping
1I/O/APD4UCK/T2CH1ETR(1)/A7/OPOTIETR_2/T1CH4_3
2I/O/APD5UTX/A5T2CH4_3/URX_2
3I/O/APD6URX/A6T2CH3_3/UTX_2
4I/O/APD7NRST/T2CH4/OPP1UCK_1/UCK_2/T2CH4_2
5I/O/APA1T1CH2/A1/OPN0OSCI/T1CH2_2
6I/O/APA2TICH2N/A0/OPP0OSCO/AETR2_1/TICH2N_2
7PVSS----
8I/O/APD0TICH1N/OPN1SDA_1/UTX_1/TICH1N_2
9PVDD----
10I/OPC0T2CH3NSS_1/UTX_3/T2CH3_2/T1CH3_1
11I/O/FTPC1SDA/NSS
12I/O/FTPC2SCL/URTS/T1BKINAETR_1/T2CH2_1/T1ETR_3/URTS_1/T1BKIN_2
13I/O PC3T1CH3T1CH1N_1/UCTS_1/T1CH3_2/T1CH1N_3
14I/O/A PC4T1CH4/MCO/A2T1CH2N_1/T1CH4_2/T1CH1_3
15I/O/FTPC5SCK/T1ETRT2CH1ETR(1)_1/SCL_2/SCL_3/UCK_3/T1ETR_1/T1CH3_3/SCK_1
16I/O/FTPC6MOSIT1CH1_1/UCTS_2/SDA_2/SDA_3/UCTS_3/T1CH3N_3/MOSI_1
17I/O PC7MISOT1CH2_1/URTS_2/T2CH2_3/URTS_3/T1CH2_3/MISO_1
18I/O/A PD1SWIO/T1CH3N/AETR2SCL_1/URX_1/T1CH3N_1/T1CH3N_2
19I/O/A PD2T1CH1/A3T2CH3_1/T1CH2N_3/T1CH1_2
20I/O/A PD3A4/T2CH2/AETR/UCTST2CH2_2/T1CH4_1
Note: 1. (1). TIM2_CH1, TIM2_ETR;
2.再マッピング機能の下線部の後の値は、AFIOレジスタの対応するビットの設定値を示します。
 例:T1CH4_3は、AFIOレジスタの対応するビットが11bに設定されていることを示します。
3.表の略語の説明:
 I = TTL/CMOS level Schmitt input.
 O = CMOS level tri-state output.
 P = power supply.
 FT = 5V tolerant.
 A = Analog signal input or output.





4. テスト回路と開発方法

4.1 テスト回路

右図の回路でプログラムを作成、動作確認をする。
回路では
・PA2にSWを取り付け
将来のプログラムではMODBUSの通信速度とDeviceAddressを初期値に戻すための SW で使用する。
・PC4には将来 1-Wire のDS18B20を取り付けます。
・PC2,PC1についてはI2Cの端子としてテストしてみたいと思う。
なお各端子名称に黄色マーカーしているのが、003J4M6の端子です。
また、003J4M6については Tx と SWIO 端子は同じ端子になっている。

4.2 使用IDE

IDEとは Integrated Development Environment の略で統合開発環境と呼ばれている。
主なIDEには
・MounRiver Studio
・Arduino
などがある
ただし Arduino はオブラートに包まれているのでプログラムは簡単そうですが、 少し踏み込んでソフトを作成する時に判らなくなる事がありそうなので、 Arduino よりMCUの動きが分かりやすいプログラム開発環境として MounRiver StudioⅡ を使用します。

4.3 IDE(PC)と003F4P6を接続

・WCH-LinkEによる接続
WCH-LinkE については右メニューの WCH-LinkEエミュレーター を参照ください。




5. 最初のプログラム

最初のプログラムはLEDの点灯ではなく、SW を押している間 PC4 に HiーLo電圧を繰り返すものを作成します。

前もって確認してもらいたい 参考ページは

●右のメニューから
・Moun River StudioⅡインストール(非常に簡単に説明)については: [Moun River StudioⅡ で]
・PA2を入力、PC4を出力に設定(GPIOの設定)については:プログラミング!下 の[203 GPIO関係]
・シリアル通信関係の設定(USARTの設定)については:プログラミング!下 の[USART(UART)関係]
●その他のページで
・C言語については:[ソフトウェア][C関係][C言語でプログラミング]も参照ください。

5.1 MounRiver StudioⅡの起動

Moun River StudioⅡ を起動した状態から下記に説明します。

[File]➡[New]➡[Moun River Project]で下記 NeW Moun River Project が表示されます。


[CH32V003[RISC-V]]➡[CH32V003F4P6]➡文字を追記[_test]➡[Finish]によりプログラムを作成する場所が下記表示されます。
左側の EXPLORER 下に表示されている [User] をクリックすると下図のように ヘッダーファイルと  C言語プログラムの ファイルが表示されます
ファイルの中で、system_ch32v00x.c と Main.c をクリックすると下図、右のようにクリックしたファイル内容が表示され、以降編集が可能になります。


5.2 system_ch32v00x.c

このファイルはプログラムするMCUのクロックを簡単に設定するものです。
今回は内部クロックで48MHzのクロックとするため
コメントアウトを外します。
// #define SYSCLK_FREQ_48MHZ_HSI 48000000

#define SYSCLK_FREQ_48MHZ_HSI 48000000
その他をコメントアウトする。

5.3 Main.c

最初に作された状態を下記に示す。

下記のように変更する。
・void GPIO_INIT (void) {} を追加。
・Main(){} の while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET){}の中に
  u8 pin_data = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2);
  if (pin_data == Bit_RESET) {
   GPIO_WriteBit(GPIOC, GPIO_Pin_4, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));
   }
を追加している。


5.4 動作確認

オシロ波形線について
黄色線がMCUのUSART1のRx(PD6 1番)端子の波形
水色線が SWIO および USART1 Tx(PD5 8番)端子の波形

①がプログラムをダウンロードしている部分
②が printf の部分
③がSWを押した時にPC4の電圧がHi-Loを繰り返している。

②の部分を拡大
 [ 時間軸を小さくした 200(ms/div)➡500(us/div)に変更 ]  GPIO_INIT();の中の PA2のプルアップされてから、printf出力までの時間は約 60(us)かかっているのが判る。
③の部分を拡大
 [ 時間軸を小さくした 上が100(ms/div) ,下が5(us/div)に変更 ]
 上の赤枠の赤線では SWが約180(ms)押し下げられ、その間PC4(青線)の電圧がHo-Lo繰り返している事が判る。
 下の赤枠の青線では PC4の Loー Hiー の時間が約3(us)かかっていることが判る。
 つまり1回繰り返す※1 のに1.5(us)かかっていることになる。
 MCUのクロックが48MHzなので、1サイクル時間は約21(ns)なので
 1回※1 につき、150 / 21 ≒ 71サイクルかかった事になる。

 ※1 1回とは main(); の中に記載の While の中で繰り返されている時間をさす。
  while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET){
   /* waiting for receiving finish */
   u8 pin_data = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2);
   if (pin_data == Bit_RESET) {
     GPIO_WriteBit(GPIOC, GPIO_Pin_4, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));
     }
   }

今回はここまでにしたい。




































更新日 2025/12/30 17:09  管理者 平林 剛Hirabayashi Takeshi