HPDL1414

是早期计算器和手持编程器上用的ASCII显示管。

之前用它做了块手表,感觉还不错。

图集

可以放在显示器上采用4psc的西门子DL1414,黑色半透明模块,还是很好看的。

蓝牙用的是10mmx10mm的超小型低功耗BLE,使用微信小程序连接下位机BLE。

使用SLA打印外壳,效果还不错,的确挺细腻的。

设计心得

DMA配置串口中断

void USART2_IRQHandler(void)/* 使用串口DMA */
{
    u8 num=0;
    if(USART_GetITStatus(USART2,USART_IT_IDLE) != RESET)
    {   
        num = USART2->SR; 
        num = USART2->DR; //清USART_IT_IDLE标志
        /* 关闭DMA ,防止干扰 */
        DMA_Cmd(DMA1_Channel6, DISABLE);   
        /* 获取接收到的数据长度 单位为字节*/
        num = DMA_Rec_Len - DMA_GetCurrDataCounter(DMA1_Channel6);  
        receive_data[num] = '\0';
        /* 重新赋值计数值,必须大于等于最大可能接收到的数据帧数目 */
        DMA1_Channel6->CNDTR = DMA_Rec_Len;   
        /* 此处应该在处理完数据再打开,如在 DataPack_Process() 打开*/
        DMA_Cmd(DMA1_Channel6, ENABLE); 
        BLE_Flag = 1;
    }
    /* 
    DMA 开启,等待数据。注意,如果中断发送数据帧的速率很快,MCU来不及处理此次接收到的数据,
    中断又发来数据的话,这里不能开启,否则数据会被覆盖。有2种方式解决:
    1. 在重新开启接收DMA通道之前,将Rx_Buf缓冲区里面的数据复制到另外一个数组中,
    然后再开启DMA,然后马上处理复制出来的数据。
    2. 建立双缓冲,重新配置DMA_MemoryBaseAddr的缓冲区地址,那么下次接收到的数据就会
    保存到新的缓冲区中,不至于被覆盖。
    */  
}

外部中断与STM32低功耗设计

//中断线0线上的中断检测(低功耗WK_UP)
void EXTI0_IRQHandler(void)
{   
    if(OPEN_UP == 0 )
        key_fall_flag = 1;//生成按键按下标志

    EXTI_ClearITPendingBit(EXTI_Line0); // 清除LINE10上的中断标志位  
} 
//中断线1线上的中断检测(水银开关)
void EXTI1_IRQHandler(void)
{   
    //if(EnGRav)
        mod++;
        if(mod==5)  
            mod = 0;
    EXTI_ClearITPendingBit(EXTI_Line1); // 清除LINE10上的中断标志位  
}

BLE小程序设计

这个demo我github开源)了,具体可以查看:

<view>

    <button  wx:if="{{!BLEValue}}" 
        type="primary" class="button" plain="true" size="mini" bindtap="InitBLE">搜 寻 蓝 牙 设 备</button>

    <button wx:else 
        type="primary" class="button"  plain="true" size="mini" bindtap="ShutBLE">关 闭 蓝 牙 设 备</button>

   <!-- <switch type="checkbox" bindchange="switch0Change"   class='connect_state' />-->


    <text wx:if="{{ConnectState}}" class="connect_state"> 已 连 接 </text>
    <text wx:else class="connect_state"> 未 连 接 </text>
</view>

<!--同步时间-->
<view>
    <view class="detail_box">
        <!-- <image src='../../images/user-unlogin.png' class="fan"></image> -->

        <text class="iconfont fan icon-shandian" style="font-size:40rpx"></text>

        <view class='name'>同步当前时间</view>

        <switch disabled="{{dis1state}}" checked="{{switch1State}}" bindchange="switch1Change" class='key' />
    </view>
</view>

<!--显示字符,按下设备开关切换模式-->
<view>
    <view class="detail_box">
        <!-- <image src='../../images/user-unlogin.png' class="fan"></image> -->

        <text class="iconfont fan icon-shandian" style="font-size:40rpx"></text>

        <view class='name'>
            <view>显示字符:</view>
            <view>\n</view>
            <view style="color:red">{{inputValue}}</view>
        </view>

        <switch disabled="{{dis2state}}" checked="{{switch2State}}" bindchange="switch2Change" class='key' />
    </view>

    <view class="page-section">
      <!--  <view class="weui-cells__title">实时获取输入值</view>   -->
        <view class="weui-cells weui-cells_after-title">
            <view class="weui-cell weui-cell_input">
                <input class="weui-input" maxlength="16" bindinput="bindKeyInput" placeholder="[点击此处输入字符]" />
            </view>
        </view>
    </view>
</view>

<!--设置定时开关机时间-->
<view>
    <view class="detail_box">
        <switch type="checkbox"  disabled="{{d_shutdownstate}}" bindchange="useshutdown" class="iconfont fan" />

        <picker disabled="{{dis3state}}" mode="time" 
                value="{{times}}" class="name" start="00:00" end="23:59" bindchange="bindTimeChange">
            <view class="picker">点击此处修改开关机时间: {{times}}</view>
        </picker>

        <switch disabled="{{dis3state}}" checked="{{switch3State}}" bindchange="switch3Change" class='key' />
    </view>
</view>

<!--设置备忘录 -->
<view>
    <view class="detail_box">
        <switch type="checkbox"  disabled="{{d_notestate}}" bindchange="usenote" class="iconfont fan" />
        <view class='name'>

            <view>[备忘录事件:]</view>
            <view>\n</view>
            <view>
                <picker disabled="{{dis3state}}" mode="time" 
                        value="{{times}}"  start="00:00" end="23:59" bindchange="bindTimeChange">
                    <view>{{times}}</view>
                </picker>
                <input class="name" maxlength="16" bindinput="bindKeyInput" placeholder="[点击此处]" />
            </view>
        </view>


        <switch disabled="{{dis4state}}" checked="{{switch3State}}" bindchange="switch4Change" class='key' />

    </view>
</view>

写在最后

这一年STM32T8U6涨的太疯了。。。有空换成ESP32来做吧,还有wifi能用。。

最后修改:2022 年 03 月 28 日
如果觉得我的文章对你有用,请随意赞赏