使用Verilog代码编写的生成波特率程序:
程序目前支持9600、19200、38400、57600、115200,如需要其他波特率请根据计算方法加入代码中,输入的时钟信号为50MHz
module SpeedSet(clk,reset,cnt);
input clk,reset;
output cnt;
///波特率对应的脉冲的个数。计算方法如下:
//以9600bps为例:1s/9600/20ns=5208.33333,即有5208个周期。
parameter bps9600 = 5208,
bps19200 = 2604,
bps38400 = 1302,
bps57600 = 868,
bps115200 = 434;
//个数的一半,即在周期的中间位置。进行采样。
parameter bps9600_2 = 2604,
bps19200_2 = 1302,
bps38400_2 = 652,
bps57600_2 = 434,
bps115200_2 = 217;
reg cnt;
reg [12:0]sample;
always@(posedge clk or negedge reset)
begin
if(!reset) begin
sample<=0;
end
</
程序目前支持9600、19200、38400、57600、115200,如需要其他波特率请根据计算方法加入代码中,输入的时钟信号为50MHz
module SpeedSet(clk,reset,cnt);
input clk,reset;
output cnt;
///波特率对应的脉冲的个数。计算方法如下:
//以9600bps为例:1s/9600/20ns=5208.33333,即有5208个周期。
parameter bps9600 = 5208,
bps19200 = 2604,
bps38400 = 1302,
bps57600 = 868,
bps115200 = 434;
//个数的一半,即在周期的中间位置。进行采样。
parameter bps9600_2 = 2604,
bps19200_2 = 1302,
bps38400_2 = 652,
bps57600_2 = 434,
bps115200_2 = 217;
reg cnt;
reg [12:0]sample;
always@(posedge clk or negedge reset)
begin
if(!reset) begin
sample<=0;
end
</

本文详细讲解了STM32微控制器中USART串口通信的波特率设置过程,涵盖了如何通过寄存器配置实现不同速率的数据传输,以及在实际应用中的注意事项。
最低0.47元/天 解锁文章
1379

被折叠的 条评论
为什么被折叠?



