SchoolWork-LaTeX/嵌入式系统原理与实践/实验报告/第三次实验——七段数码管.tex

199 lines
5.2 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\documentclass[全部作业]{subfiles}
\begin{document}
\date{2024年11月3日}
\begin{frame}
%\maketitle
\titlepage
\end{frame}
\begin{frame}
\frametitle{目录}
\tableofcontents
\end{frame}
\section{第三次实验}
\subsection{准备}
\begin{frame}[fragile]
将实验二的代码复制一份并将exp2改名为exp3
\vspace{1em}
\begin{minipage}[H]{0.3\linewidth}
\begin{minted}[linenos=false]{text}
exp2
│ .mxproject
│ exp2.ioc
├─Core
├─Drivers
└─MDK-ARM
exp2.uvprojx
startup_stm32g473xx.s
\end{minted}
\end{minipage}
{\Huge$\longrightarrow$}
\begin{minipage}[H]{0.3\linewidth}
\begin{minted}[linenos=false]{text}
exp3
│ .mxproject
│ exp3.ioc
├─Core
├─Drivers
└─MDK-ARM
exp3.uvprojx
startup_stm32g473xx.s
\end{minted}
\end{minipage}
\vspace{1em}
需要改文件夹名、.ioc、.uvprojx这三个地方。
\end{frame}
\begin{frame}
打开.uvprojx文件修改调试器
\includegraphics{imgs/2024-10-29-11-36-58.png}
\vspace{1em}
\includegraphics[width=1\linewidth]{imgs/2024-10-29-11-35-44.png}
\end{frame}
\begin{frame}
修改调试设置把reset and run打勾就不需要手动按重置按钮了。
\includegraphics[width=1\linewidth]{imgs/2024-10-29-14-54-11.png}
\end{frame}
\subsection{端口修改}
\begin{frame}
这样设置端口,点击生成代码。
\includegraphics[width=0.8\linewidth]{imgs/2024-11-03-13-47-47.png}
\end{frame}
\begin{frame}
将 STM32 核心板 JP1 的 PA0$\sim$PA7 与系统的七段数码管电路的 JP19 相连PA0$\sim$PA7 分别对应于JP19的D0$\sim$D7用1x4的杜邦线将STM32核心板的JP2的PB0$\sim$PB3 分别连接到系统底板上JP20的A、B、C和OE接口。
\includegraphics[width=0.2\linewidth]{imgs/IMG_20241103_194712_1.jpg}
\includegraphics[width=0.2\linewidth]{imgs/IMG_20241103_194932.jpg}
\includegraphics[width=0.2\linewidth]{imgs/IMG_20241103_144021.jpg}
\includegraphics[width=0.2\linewidth]{imgs/IMG_20241103_144035.jpg}
\end{frame}
\subsection{代码修改}
\begin{frame}[fragile]
main.c:
\begin{multicols}{2}
\begin{minted}[firstnumber=45]{C}
/* USER CODE BEGIN PV */
stSysTickTimer sSysTickTimer = {
0, 0, 0, 0
};
uint16_t display_tab[] = {
0x3f,
0x06,
0x5b,
0x4f,
0x66,
0x6d,
0x7d,
0x07,
0x7f,
0x6f,
0x77,
0x7c,
0x39,
0x5e,
0x79,
0x71
};
uint16_t PosSel = 0;
/* USER CODE END PV */
\end{minted}
\end{multicols}
\end{frame}
\begin{frame}[fragile]
main.c:
\begin{multicols}{2}
\begin{minted}[firstnumber=117]{C}
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
if (sSysTickTimer.bTimeOk) {
sSysTickTimer.bTimeOk = 0;
HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
}
// if (sSysTickTimer.bTenMilSecOk) {
SegLedData_GPIO_Port->ODR = 0x00;
AddrA_GPIO_Port->ODR = PosSel;
SegLedData_GPIO_Port->ODR = display_tab[PosSel % 8];
if (++PosSel >= 8) {
PosSel = 0;
}
// }
}
/* USER CODE END 3 */
\end{minted}
\end{multicols}
\end{frame}
\subsection{思考题}
\begin{frame}[fragile]
我们的需求是将数字一位一位向前推进,那么考虑现在的位选信号(控制哪一位上显示数字)与段选信号(控制显示哪个数字)之间的关系,根据 \mintinline{C}{SegLedData_GPIO_Port->ODR = display_tab[PosSel % 8];}
可知
$$
\text{段选信号}_0=f(\text{位选信号}_0)
$$
而修改后就变成了(时间用$t$表示)
$$
\text{段选信号}_{t}=g(\text{位选信号}_{t}, t)
$$
因此,只需要加一个随时间变化的变量,例如 $bias = bias(t)$再把之前的f看做是时间为0时的静止状态则可以得到
$$
\begin{cases}
\text{段选信号}_0=g(\text{位选信号}_0, 0) = h(\text{位选信号}_0, bias(0)) = f(\text{位选信号}_0) \\
\text{段选信号}_{t}=g(\text{位选信号}_{t}, t) = h(\text{位选信号}_{t}, bias(t)) \\
\end{cases}
$$
其中的$h$$bias$就是我们需要构造的函数和变量。
\end{frame}
\begin{frame}[fragile]
确定$bias(0)$的值:
\begin{minted}[firstnumber=68]{C}
uint8_t bias = 0;
\end{minted}
在bTimeOk时改变$bias$的值,使$bias$随时间变化:
\begin{minted}[firstnumber=128]{C}
if (++bias >= 8) {
bias = 0;
}
\end{minted}
构造$h(\text{段选信号}, bias)$使得$h(\text{段选信号},0)=f(\text{段选信号})$
\begin{minted}[firstnumber=136]{C}
SegLedData_GPIO_Port->ODR = display_tab[(PosSel + bias) % 8];
\end{minted}
\end{frame}
\subsection{实验结果}
\begin{frame}
初始显示01234567每过一秒数字向左循环移位一位
$$
01234567 \to 12345670 \to 23456701 \to \cdots \to 70123456 \to 01234567
$$
\includegraphics[width=0.5\linewidth]{imgs/IMG_20241103_162322.jpg}
完整视频可以查看:\url{https://gitea.librastalker.top/423A35C7/STM32CubeMX-Keil_uVision5}
\end{frame}
\end{document}