Browse Source

v1.0

master
zhaohe 4 years ago
parent
commit
2d03432ca5
  1. 8
      Core/Src/tim.c
  2. 177
      MDK-ARM/WaveBox.uvguix.zel
  3. 31
      MDK-ARM/WaveBox.uvoptx
  4. 89
      README.md
  5. BIN
      markdown.assets/README.assets/image-20210719133125591.png
  6. BIN
      markdown.assets/README.assets/image-20210719152159991.png
  7. BIN
      markdown.assets/README.assets/image-20210719152611798.png
  8. BIN
      markdown.assets/README.assets/image-20210719152837479.png
  9. BIN
      markdown.assets/README.assets/image-20210719153506009.png
  10. BIN
      markdown.assets/README.assets/image-20210719153655380.png
  11. 383
      sscom51.ini
  12. 42
      usec/user_main.c
  13. BIN
      wavebox_test_tools.exe

8
Core/Src/tim.c

@ -39,11 +39,11 @@ void MX_TIM3_Init(void)
TIM_OC_InitTypeDef sConfigOC = {0};
htim3.Instance = TIM3;
htim3.Init.Prescaler = 65535;
htim3.Init.Prescaler = 0;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 0xFFFF;
htim3.Init.Period = 1;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
{
Error_Handler();
@ -265,7 +265,7 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
*/
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

177
MDK-ARM/WaveBox.uvguix.zel
File diff suppressed because it is too large
View File

31
MDK-ARM/WaveBox.uvoptx

@ -158,6 +158,21 @@
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>CMSIS_AGDI</Key>
<Name>-X"ATK CMSIS-DAP-Debugger" -UATK 05022018 -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F429VETx$CMSIS/Flash/STM32F4xx_512.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
@ -183,11 +198,23 @@
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<WatchWindow1>
<Ww>
<count>0</count>
<WinNumber>1</WinNumber>
<ItemText>s_rxbuf</ItemText>
</Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>s_rxbuf_has_received</ItemText>
</Ww>
</WatchWindow1>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>0</SubType>
<ItemText>GPIOC</ItemText>
<SubType>8</SubType>
<ItemText>s_rxbuf[s_rxbuf_has_received]</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>

89
README.md

@ -1 +1,88 @@
参考 同步盒使用说明2015.docx
# 同步盒子
[toc]
## Release
```
v1.0
1. 实现同步盒使用说明2015.docx要求的全部功能
TODO:
如果低电平时间小于3us,会出现多触发一个脉冲的问题。
```
## USB转232
```
参考 http://192.168.1.3:3000/ztools/ugreen_usb_to_232
```
## 协议及其盒子使用说明
```
参考 同步盒使用说明2015.docx
```
## 下载器接线说明
```
需要注意一下,dio和clk丝印反了.
```
![image-20210719133125591](markdown.assets/README.assets/image-20210719133125591.png)
## 485接线说明
![image-20210719153655380](markdown.assets/README.assets/image-20210719153655380.png)
## 测试
### 连续模式测试
直接通过上位机软件进行测试,不断调整不同的频率,占空比,测试输出PWM的准确性
![image-20210719153506009](markdown.assets/README.assets/image-20210719153506009.png)
### 产生一定脉冲数测试
由于是瞬发事件,示波器很难抓到对应的波形,所以通过以下方式测试。
#### 一.配置串口,输出99khz,5us,11次的指令,定时循环发送
```
S9900000000500000011
```
![image-20210719152159991](markdown.assets/README.assets/image-20210719152159991.png)
#### 二.示波器上按下自动设置
![image-20210719152611798](markdown.assets/README.assets/image-20210719152611798.png)
#### 三.调整周期和位置,数脉冲个数
![image-20210719152837479](markdown.assets/README.assets/image-20210719152837479.png)

BIN
markdown.assets/README.assets/image-20210719133125591.png

After

Width: 411  |  Height: 446  |  Size: 215 KiB

BIN
markdown.assets/README.assets/image-20210719152159991.png

After

Width: 1525  |  Height: 778  |  Size: 66 KiB

BIN
markdown.assets/README.assets/image-20210719152611798.png

After

Width: 1209  |  Height: 594  |  Size: 938 KiB

BIN
markdown.assets/README.assets/image-20210719152837479.png

After

Width: 1608  |  Height: 755  |  Size: 1.7 MiB

BIN
markdown.assets/README.assets/image-20210719153506009.png

After

Width: 600  |  Height: 445  |  Size: 31 KiB

BIN
markdown.assets/README.assets/image-20210719153655380.png

After

Width: 674  |  Height: 906  |  Size: 989 KiB

383
sscom51.ini

@ -0,0 +1,383 @@
;删除本文件可以恢复默认值。
;这是SSCOM的设置保存文件,您在程序中设置好的串口参数和字符串数据都会自动保存,请最好不要用外部编辑器改动本文件!
;如果文件被修改后程序不能打开,请删除本文件,程序将会自动生成一个新的ini文件.
;靠行首的半角分号是注释符号
;每行都以回车结束
;"="后面的H表示这是个HEX数据串
;"="后面的A表示这是个ASC字符串
;Nx表示第几条定义的字符串(1<x<=N)
N101=1,99khz50%10方波,1000
N1=A,S9900000000500000010
N102=3,99khz50%11方波,1000
N2=A,S9900000000500000011
N103=2,欢迎语,1000
N3=A,
N104=0,4无注释,1000
N4=A,
N105=0,5无注释,1000
N5=A,
N106=0,6无注释,1000
N6=A,
N107=0,7无注释,1000
N7=A,
N108=0,8无注释,1000
N8=A,
N109=0,,1000
N9=A,
N110=0,,1000
N10=A,
N111=0,,1000
N11=A,
N112=0,,1000
N12=A,
N113=0,,1000
N13=A,
N114=0,,1000
N14=A,
N115=0,,1000
N15=A,
N116=0,,1000
N16=A,
N117=0,,1000
N17=A,
N118=0,,1000
N18=A,
N119=0,19无注释,1000
N19=A,
N120=0,20无注释,1000
N20=A,
N121=0,21无注释,1000
N21=A,
N122=0,22无注释,1000
N22=A,
N123=0,23无注释,1000
N23=A,
N124=0,24无注释,1000
N24=A,
N125=0,25无注释,1000
N25=A,
N126=0,26无注释,1000
N26=A,
N127=0,27无注释,1000
N27=A,
N128=0,28无注释,1000
N28=A,
N129=0,29无注释,1000
N29=A,
N130=0,30无注释,1000
N30=A,
N131=0,31无注释,1000
N31=A,
N132=0,32无注释,1000
N32=A,
N133=0,33无注释,1000
N33=A,
N134=0,34无注释,1000
N34=A,
N135=0,35无注释,1000
N35=A,
N136=0,36无注释,1000
N36=A,
N137=0,37无注释,1000
N37=A,
N138=0,38无注释,1000
N38=A,
N139=0,39无注释,1000
N39=A,
N140=0,40无注释,1000
N40=A,
N141=0,41无注释,1000
N41=A,
N142=0,42无注释,1000
N42=A,
N143=0,43无注释,1000
N43=A,
N144=0,44无注释,1000
N44=A,
N145=0,45无注释,1000
N45=A,
N146=0,46无注释,1000
N46=A,
N147=0,47无注释,1000
N47=A,
N148=0,48无注释,1000
N48=A,
N149=0,49无注释,1000
N49=A,
N150=0,50无注释,1000
N50=A,
N151=0,51无注释,1000
N51=A,
N152=0,52无注释,1000
N52=A,
N153=0,53无注释,1000
N53=A,
N154=0,54无注释,1000
N54=A,
N155=0,55无注释,1000
N55=A,
N156=0,56无注释,1000
N56=A,
N157=0,57无注释,1000
N57=A,
N158=0,58无注释,1000
N58=A,
N159=0,59无注释,1000
N59=A,
N160=0,60无注释,1000
N60=A,
N161=0,61无注释,1000
N61=A,
N162=0,62无注释,1000
N62=A,
N163=0,63无注释,1000
N63=A,
N164=0,64无注释,1000
N64=A,
N165=0,65无注释,1000
N65=A,
N166=0,66无注释,1000
N66=A,
N167=0,67无注释,1000
N67=A,
N168=0,68无注释,1000
N68=A,
N169=0,69无注释,1000
N69=A,
N170=0,70无注释,1000
N70=A,
N171=0,71无注释,1000
N71=A,
N172=0,72无注释,1000
N72=A,
N173=0,73无注释,1000
N73=A,
N174=0,74无注释,1000
N74=A,
N175=0,75无注释,1000
N75=A,
N176=0,76无注释,1000
N76=A,
N177=0,77无注释,1000
N77=A,
N178=0,78无注释,1000
N78=A,
N179=0,79无注释,1000
N79=A,
N180=0,80无注释,1000
N80=A,
N181=0,81无注释,1000
N81=A,
N182=0,82无注释,1000
N82=A,
N183=0,83无注释,1000
N83=A,
N184=0,84无注释,1000
N84=A,
N185=0,85无注释,1000
N85=A,
N186=0,86无注释,1000
N86=A,
N187=0,87无注释,1000
N87=A,
N188=0,88无注释,1000
N88=A,
N189=0,89无注释,1000
N89=A,
N190=0,90无注释,1000
N90=A,
N191=0,91无注释,1000
N91=A,
N192=0,92无注释,1000
N92=A,
N193=0,93无注释,1000
N93=A,
N194=0,94无注释,1000
N94=A,
N195=0,95无注释,1000
N95=A,
N196=0,96无注释,1000
N96=A,
N197=0,97无注释,1000
N97=A,
N198=0,98无注释,1000
N98=A,
N199=0,99无注释,1000
N99=A,
;发送文件时每256字节延时时间ms
N1051=,1
;打开文件地址和名称
N1052=,
;主面板ASC字符串
N1053=,S9900000000500000011
;主面板HEX数据串
N1054=,12 FF 00 30
;主面板发送方式(ASC or HEX)
N1055=,A
;主面板字符串发送间隔时间ms
N1056=,50
;主面板字符串发送新行
N1057=,N
;多条字符串发送间隔时间ms
N1058=,1
;接收窗口是否HEX显示方式
N1059=,N
;校验方式,0=None,1=modbusCRC16,2=ADD,3=XOR
N1060=,0
;保存DTR:
N1061=,Y
;保存RTS:
N1062=,N
;程序启动时是否打开串口
N1063=,N
;是否分包显示
N1064=,N
;分包超时时间ms
N1065=,20
;接收窗背景颜色
N1066=,16777215
;显示缓冲上限,200K,500K,1M,2M,5M,10M,20M
N1067=,1000000
;远程IP地址
N1068=,120.76.28.211
;远程端口
N1069=,80
;本地端口
N1070=,777
;选择回车后发送行(带回显)
N1071=,N
;选择按键立即发送键值
N1072=,Y
;选择回显
N1073=,N
;第几字节至末尾加校验
N1074=,1
;至末尾倒数第几字节加校验,存第几个项目
N1075=,0
;终端仿真输入回车后是否自动加换行
N1076=,N
;当前串口号Port=COMX,网络模式):1=TCPCLIENT,2=TCPSERVER,3=UDP
N1080=,COM2
;波特率Band rate
N1081=,9600
;保存窗口宽度
N1082=,1525
;保存窗口高度
N1083=,778
;保存窗口left
N1084=,135
;保存窗口top
N1085=,158
;分割线位置(右侧装多条自定义字符串的容器宽度)
N1086=,686
;多条发送按钮的宽度
N1087=,120
;保存窗口字体名称
N1088=,宋体
;保存窗口字体大小
N1089=,9
;保存窗口字体颜色
N1090=,0
;C:Chinese汉语,E:English
N1100=,汉语
;end

42
usec/user_main.c

@ -28,6 +28,15 @@
#define LOGD(fmt, ...) printf("D:" fmt, ##__VA_ARGS__);
#define LOGE(fmt, ...) printf("E:" fmt, ##__VA_ARGS__);
#if 0
#define LOGI(fmt, ...) printf("" fmt, ##__VA_ARGS__);
#define LOGD(fmt, ...) printf("D:" fmt, ##__VA_ARGS__);
#define LOGE(fmt, ...) printf("E:" fmt, ##__VA_ARGS__);
#else
#define LOGI(fmt, ...)
#define LOGD(fmt, ...)
#define LOGE(fmt, ...)
#endif
static uint8_t s_order_rxbuf;
static uint8_t s_rxbuf[50];
static uint8_t s_rxbuf_has_received;
@ -74,12 +83,22 @@ void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
}
}
HAL_UART_Receive_IT(&huart1, &s_order_rxbuf, 1);
// HAL_UART_Receive_IT(&ORDER_UART, &s_order_rxbuf, 1);
}
}
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) {
if (&huart1 == huart) {
HAL_UART_Receive_IT(&huart1, &s_order_rxbuf, 1);
if (&ORDER_UART == huart) {
// HAL_UART_Receive_IT(&ORDER_UART, &s_order_rxbuf, 1);
}
}
void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart) {
if (&ORDER_UART == huart) {
// HAL_UART_Receive_IT(&ORDER_UART, &s_order_rxbuf, 1);
}
}
void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart) {
if (&ORDER_UART == huart) {
// HAL_UART_Receive_IT(&ORDER_UART, &s_order_rxbuf, 1);
}
}
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) {
@ -87,7 +106,7 @@ void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) {
/**
* @brief
*/
#if 0
#if 1
if (g_continue_output_mode) return;
if (g_pulse_num == 0) {
@ -95,7 +114,7 @@ void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) {
} else {
g_pulse_num--;
}
#endif
#endif
}
}
/**
@ -135,7 +154,7 @@ void trigger_pwm(int32_t freq, float duty, int32_t pluse_num) {
return;
}
// ,
float psc_x_arr = 84 * 1000 * 1000 / freq;
float psc_x_arr = 90 * 1000 /*系统时钟*/ * 1000 / freq;
uint32_t psc = 0;
uint32_t arr = 65534;
for (; arr > 2; arr--) {
@ -208,10 +227,10 @@ void process_rxbuf() {
// pluse_width, pluse_num);
float duty = pluse_width / 10.0 / (1 * 1000 * 1000.0 / freq);
LOGI("trigger pwm\r\n");
LOGI(" f[%d]hz\r\n", freq);
LOGI(" w[%d]0.1us(%2.2f%%)\r\n", pluse_width, duty*100);
LOGI(" n[%d]\r\n", pluse_num);
LOGD("trigger pwm\r\n");
LOGD(" f[%d]hz\r\n", freq);
LOGD(" w[%d]0.1us(%2.2f%%)\r\n", pluse_width, duty * 100);
LOGD(" n[%d]\r\n", pluse_num);
trigger_pwm(freq, duty, pluse_num);
}
@ -232,6 +251,9 @@ void user_main() {
s_rxbuf_has_received = 0;
}
#endif
if (ORDER_UART.RxState == HAL_UART_STATE_READY) {
HAL_UART_Receive_IT(&ORDER_UART, &s_order_rxbuf, 1);
}
/**
* @brief

BIN
wavebox_test_tools.exe

Loading…
Cancel
Save